我在使用Owin托管的应用程序中创建会话时遇到问题。我尝试过使用RedisSession
,但我不知道如何配置它,所以它给了我一个错误。
我找了一段时间的解决方案,尝试了不同的东西,最后决定在这里寻求帮助。
对象HTTPContext
为空。
我正在使用Ninject进行依赖注入。
我尝试过类似的东西:Can OWIN middleware use the http session?
有人知道如何在Owin会话中存储登录数据吗?
下面是Owin配置文件,其中包含的内容来自上面发布的链接。
[assembly: OwinStartup(typeof(Service.Startup))]
namespace Service
{
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }
);
appBuilder.RequireAspNetSession();
appBuilder.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config);
}
public static StandardKernel CreateKernel()
{
var kernel = new StandardKernel(new Module());
return kernel;
}
}
public static class AspNetSessionExtensions
{
public static IAppBuilder RequireAspNetSession(this IAppBuilder app)
{
app.Use((context, next) =>
{
// Depending on the handler the request gets mapped to, session might not be enabled. Force it on.
HttpContextBase httpContext = context.Get<HttpContextBase>(typeof(HttpContextBase).FullName);
httpContext.SetSessionStateBehavior(SessionStateBehavior.Required);
return next();
});
// SetSessionStateBehavior must be called before AcquireState
app.UseStageMarker(PipelineStage.MapHandler);
return app;
}
}
}