Attualmente ho un'applicazione ospitata da IIS che vorrei passare per utilizzare il metodo self-hosted.ServiceStack: accesso a HttpRequest in un'applicazione selfhosted
Ma ho difficoltà ad accedere alla sessione in modo da poter recuperare il nome utente degli utenti correnti.
Questo è il codice che ho usato quando ospitano in IIS che ha funzionato perfettamente:
/// <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"; }
}
}
questo si aggiunge per l'host app con il seguente codice ::
container.RegisterAutoWiredAs<ServiceStackAuthTokenService, IAuthTokenService>()
Durante l'esecuzione di self-hosted HttpContext.Current è null, come posso accedere alla richiesta in un'applicazione self-hosted?
Grazie!
Aggiornamento Ulteriori cose che ho provato:
secondo un post qui: https://groups.google.com/forum/#!msg/servicestack/jnX8UwRWN8A/_XWzTGbnuHgJ
E 'stato suggerito di utilizzare:
container.Register> (c => AuthService.CurrentSessionFactory);
Questo restituisce appena una nuova sessione IAuth.
Ciò che l'utente in quel post sta facendo è esattamente ciò che sto cercando di ottenere.
Nello scorso post Mythz dice:
Giusto per essere chiari, in modo da formare la chiave di sessione che fa riferimento alla sessione di utenti è necessario sia i cookie ss-id o SS-PID (come determinato da SS- opta). È possibile rimuovere i cookie dall'oggetto IHttpRequest o in altro modo in ASP.NET il singleton HttpContext.Current.Request, quindi qualunque sia il factory IAuthUserSession inietti a prendere qualcosa che può dargli i cookie, ovvero un IRequestContext, IHttpRequest, IService, ecc.
Ma non riesco ancora a vedere un modo per accedere a IHttpRequest.
Quando/Dove finisce GetCurrentAuthToken() viene chiamato nella tua applicazione? Se si trova in un servizio, è possibile passare IHttpRequest e IHttpResponse nel metodo come GetCurrentAuthToken (base.Request, base.Response). – paaschpa
Ciao Paaschpa, si verifica nel livello DAL che non ha alcuna relazione diretta con il livello di servizio. Potrei passare il contesto nei DAL ma ciò violerebbe il design e manterrebbe ogni livello separato. – Rtype
Dopo aver esaminato ulteriormente, posso vedere IHttpRequest e IHttpResponse viene iniettato in servizio tramite l'interfaccia IRequiresRequestContext che si trova nella classe di base del servizio. Fondamentalmente voglio essere in grado di accedere alla stessa cosa in modo da poter accedere alla cache in cui è memorizzata la sessione client. – Rtype