В настоящее время у меня есть хостинг-приложение IIS, которое я бы хотел переключить, чтобы использовать самообслуживаемый метод.ServiceStack: доступ к HttpRequest в самозакрывающемся приложении
Но у меня возникают трудности с доступом к сеансу, поэтому я могу получить имя пользователя текущего пользователя.
Это код, который я использовал при размещении под IIS, который работал отлично:
/// <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"; }
}
}
Это добавляется в приложение хоста со следующим кодом ::
container.RegisterAutoWiredAs<ServiceStackAuthTokenService, IAuthTokenService>()
При запуске резидентных HttpContext.Current является нулевым, как мне получить доступ к запросу в самообслуживающем приложении?
Спасибо!
Update Дополнительные вещи я пытался:
в соответствии с пост здесь: https://groups.google.com/forum/#!msg/servicestack/jnX8UwRWN8A/_XWzTGbnuHgJ
Было предложено использовать:
container.Register> (с => AuthService.CurrentSessionFactory);
Это просто возвращает новый IAuthSession.
То, что пользователь в этой должности делает, именно то, чего я пытаюсь достичь.
В последний пост Mythz говорит:
Просто чтобы быть ясно, для формирования ключа сеанса, который ссылается на сессии пользователей, которым нужно либо сс-ID или сс-PID печенье (как определено & beta; выбирает). Вы можете получать файлы cookie с объекта IHttpRequest или иным образом в ASP.NET HttpContext.Current.Request singleton, поэтому на любой фабрике IAuthUserSession, которую вы вводите, нужно взять что-то, что может дать ей файлы cookie, то есть IRequestContext, IHttpRequest, IService и т. Д. .
Но я все еще не могу найти способ доступа к IHttpRequest.
Когда/Где GetCurrentAuthToken() вызывается в вашем приложении? Если это в службе, вы можете передать IHttpRequest и IHttpResponse в метод, например GetCurrentAuthToken (base.Request, base.Response). – paaschpa
Hi Paaschpa, Он встречается в слое DAL, который не имеет прямого отношения к служебному слою. Я мог бы передать контекст в DAL, но это нарушит дизайн и сохранит каждый слой отдельно. – Rtype
Изучив это, я вижу, что IHttpRequest и IHttpResponse вводятся в службу через интерфейс IRequiresRequestContext, который находится в базовом классе службы. Я в основном хочу иметь доступ к одной и той же вещи, чтобы я мог получить доступ к кешу, где хранится сеанс клиента. – Rtype