Mam obecnie hostowaną aplikację IIS, którą chciałbym przełączyć, aby użyć metody hostowanej samodzielnie.ServiceStack: Uzyskiwanie dostępu do HttpRequest w selfhosted aplikacji
Mam trudności z uzyskaniem dostępu do sesji, dzięki czemu mogę pobrać bieżącą nazwę użytkownika.
Jest to kod Kiedyś, gdy gospodarzem pod IIS, który doskonale pracował:
/// <summary>
/// A basic wrapper for the service stack session, to allow access to it lower down in the DAL layer without tying us to servicestack.
/// </summary>
public class ServiceStackAuthTokenService : IAuthTokenService
{
/// <summary>
/// GetCurrentAuthToken.
/// </summary>
/// <returns>A string representing the users auth name.</returns>
public string GetCurrentAuthToken()
{
// Grab the current request.
var req = HttpContext.Current.Request.ToRequest();
var res = HttpContext.Current.Response.ToResponse();
// Fetch the authentication service.
var authService = EndpointHost.AppHost.TryResolve<AuthService>();
authService.RequestContext = new HttpRequestContext(req, res, null);
// Grab the session.
var session = authService.GetSession(false);
// Return the username.
return session.UserName;
}
public string UserPropertyName
{
get { return "UserName"; }
}
}
ta jest dodawana do hosta aplikacji z następującym kodem ::
container.RegisterAutoWiredAs<ServiceStackAuthTokenService, IAuthTokenService>()
Po uruchomieniu self-hosted HttpContext.Current ma wartość null, w jaki sposób uzyskać dostęp do żądania w ramach aplikacji hostowanej samodzielnie?
Dzięki!
Aktualizuj Dodatkowe rzeczy próbowałem:
zgodnie z post tutaj: https://groups.google.com/forum/#!msg/servicestack/jnX8UwRWN8A/_XWzTGbnuHgJ
Zasugerowano, aby użyć:
container.Register> (c => AuthService.CurrentSessionFactory);
To po prostu zwraca nową IAuthSession.
To, co robi użytkownik w tym poście, jest dokładnie tym, co próbuję osiągnąć.
W Mythz ostatniego postu mówi:
Wystarczy być jasne, w celu utworzenia klucza sesyjnego, który odwołuje sesję Użytkownicy trzeba albo SS-ID lub SS-pid ciasteczek (określony przez SS- opts). Możesz pobrać ciasteczka z obiektu IHttpRequest lub w inny sposób w ASP.NET HttpContext.Current.Request single, więc jakakolwiek fabryka IAuthUserSession, którą wstrzykniesz, musi pobrać coś, co może nadać jej pliki cookie, tj. Albo IRequestContext, IHttpRequest, IService, itp.
Ale nadal nie widzę sposobu, aby uzyskać dostęp do IHttpRequest.
Kiedy/Gdzie GetCurrentAuthToken() Zostajesz wezwany w swojej aplikacji? Jeśli jest to w usłudze, możesz przekazać IHttpRequest i IHttpResponse do metody jak GetCurrentAuthToken (base.Request, base.Response). – paaschpa
Cześć Paaschpa, Występuje w warstwie DAL, która nie ma bezpośredniego związku z powrotem do warstwy usługi. Mogłem przekazać kontekst do DAL-ów, ale to naruszyłoby konstrukcję i zachowałoby każdą warstwę osobno. – Rtype
Przyjrzawszy się temu dalej, widzę IHttpRequest i IHttpResponse jest wstrzykiwany do usługi za pośrednictwem interfejsu IRequiresRequestContext, który jest w klasie bazowej usługi. Zasadniczo chcę mieć dostęp do tej samej rzeczy, aby uzyskać dostęp do pamięci podręcznej, w której przechowywana jest sesja klienta. – Rtype