Docker容器内的HostContext.TryGetCurrentRequest()始终为null-ServiceStack

时间:2018-06-21 13:52:36

标签: servicestack

使用ss-id ServiceStack会话cookie,当用户使用相同帐户创建了太多会话时,我正在跟踪用户的会话并撤消该会话。

我有一个实现以下接口的CustomCredentialsAuthProvider:

public interface IUserSessionSource
{
    IAuthSession GetUserSession(string userAuthId);
}

每当我的一个API在我的Auth API中调用GetUserSession时,我都会使用以下代码来尝试获取ss-id cookie的值:

public IAuthSession GetUserSession(string userAuthId)
{
    IRequest req = HostContext.TryGetCurrentRequest();
    IAuthSession session = req.GetSession();
} 

这在我运行我的API本地主机时有效。在将我的API部署到Docker容器中后,HostContext.TryGetCurrentRequest()始终返回null。

我正在Linux(CentOS发行版)Docker容器中运行.NETCore。

有人猜测为什么HostContext.TryGetCurrentRequest在Docker容器内部失败?

是否有更可靠的替代方法来将HTTP请求中包含的ss-id cookie值获取到我的Auth API?

1 个答案:

答案 0 :(得分:2)

HostContext.TryGetCurrentRequest()仅在允许在运行时访问HttpContext的主机中可用,默认情况下,这是经典的ASP.NET Framework Apps。

理想情况下,您应该避免使用对请求上下文的单例访问,而应从服务中的base.Request传递它,但对于.NET Core应用程序,您应该在启动ConfigureServices()can register HttpContextAccessor,但它会导致性能下降:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();