我有 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