ServiceStack: Zugriff auf HttpRequest in einer Selfhosted-Anwendung
Ich habe derzeit eine von IIS gehostete Anwendung, die ich auf die selbst gehostete Methode umstellen möchte.
Ich habe jedoch Schwierigkeiten, auf die Sitzung zuzugreifen, damit ich den Benutzernamen des aktuellen Benutzers abrufen kann.
Dies ist der Code, den ich beim Hosten unter IIS verwendet habe und der perfekt funktioniert hat:
/// <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"; }
}
}
Dies wird dem App-Host mit dem folgenden Code hinzugefügt:
container.RegisterAutoWiredAs<ServiceStackAuthTokenService, IAuthTokenService>()
Wie greife ich auf die Anforderung unter einer selbst gehosteten Anwendung zu, wenn HttpContext.Current auf null gesetzt ist?
Vielen Dank!
Aktualisieren Weitere Dinge, die ich ausprobiert habe:
wie in einem Beitrag hier:https://groups.google.com/forum/#!msg/servicestack/jnX8UwRWN8A/_XWzTGbnuHgJ
Es wurde vorgeschlagen, zu verwenden:
container.Register> (c => AuthService.CurrentSessionFactory);
Dies gibt nur eine neue IAuthSession zurück.
Was der Benutzer in diesem Beitrag tut, ist genau das, was ich versuche zu erreichen.
Im letzten Beitrag sagt Mythz:
Um klar zu sein, benötigen Sie zur Bildung des Sitzungsschlüssels, der auf die Benutzersitzung verweist, entweder die Cookies ss-id oder ss-pid (wie von ss-opts festgelegt). Sie können Cookies vom IHttpRequest-Objekt oder auf andere Weise in ASP.NET vom HttpContext.Current.Request-Singleton abrufen. Unabhängig von der IAuthUserSession-Factory, die Sie einspeisen, müssen Sie also etwas verwenden, das ihm die Cookies geben kann, z. B. einen IRequestContext, IHttpRequest, IService usw.
Ich kann aber immer noch keinen Weg finden, auf die IHttpRequest zuzugreifen.