HttpContext.Current.Session 在注入拦截器时为 null / 或在内部拦截器中使用 (mvc4



我有 mvc4 WebAPI 应用程序与城堡温莎拦截。
拦截器类需要HttpContext.Current.Session .
当我直接从拦截器调用它时,它是空的。
所以我在这里读到我需要注入会话,而不仅仅是在拦截器中访问它。

这是我最终得到的代码...

protected void Application_Start()
{
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container.Kernel));
            this.RegisterDependencyResolver();
            this.container.Install(new WindsorWebApiInstaller());
}
public class WindsorWebApiInstaller : IWindsorInstaller
{
  public void Install(IWindsorContainer container, IConfigurationStore store)
  {
     // the following interceptor needs Session object
     container.Register( Component.For<IInterceptor>()
                     .ImplementedBy<SecurityInterceptor>()
                     .LifestylePerWebRequest()
                     .Named("SecurityInterceptor"));
     // session is null here, So Castle wont inject it and throw exception...
     container.Register(
         Component.For<HttpSessionStateBase>().UsingFactoryMethod( 
                   () => new HttpSessionStateWrapper(HttpContext.Current.Session)).LifestylePerWebRequest());
  }
}

还有其他方法可以从拦截器访问会话吗?

谢谢

我总是忘记WEBAPI不是MVC。
这不是城堡问题。

这成功了!

public override void Init()
{
    this.PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;
    base.Init();
}
void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
{
    System.Web.HttpContext.Current.SetSessionStateBehavior(
        SessionStateBehavior.Required);
}


https://stackoverflow.com/a/15038669/936651+1 到 @Soren

最新更新