我目前有一个 IIS 托管应用程序,我想切换到使用自托管方法。
但是我在访问会话时遇到了困难,因此我可以检索当前用户的用户名。
这是我在 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 为空,如何在自托管应用程序下访问请求?
谢谢!
更新 我尝试过的其他事情:
根据这里的帖子:https ://groups.google.com/forum/#!msg/servicestack/jnX8UwRWN8A/_XWzTGbnuHgJ
建议使用:
container.Register>(c => AuthService.CurrentSessionFactory);
这只是返回一个新的 IAuthSession。
该帖子中的用户正在做的正是我想要实现的目标。
在上一篇文章中神话说:
需要明确的是,为了形成引用用户会话的会话密钥,您需要 ss-id 或 ss-pid cookie(由 ss-opts 确定)。您可以从 IHttpRequest 对象或 ASP.NET 中的 HttpContext.Current.Request 单例中获取 cookie,因此无论您注入的任何 IAuthUserSession 工厂都需要获取可以为其提供 cookie 的东西,即 IRequestContext、IHttpRequest、IService 等。
但我仍然看不到访问 IHttpRequest 的方法。