最近在改寫WebApp時要將之前用泛型處理例程寫的Captcha 改爲使用WebApi 來實做機制,在實做的過程當中發現使用IRequiresSessionState session也沒法使用(context.Session==null)web
public class SessionRouteHandler : HttpControllerHandler, IRequiresSessionState { public SessionRouteHandler(RouteData routeData) : base(routeData) { } } public class SessionControllerRouteHandler : HttpControllerRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { return new SessionRouteHandler(requestContext.RouteData); } }
在WebApiConfig中將config.Routes.MapHttpRoute 改爲api
public static void Register(HttpConfiguration config) { RouteTable.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ).RouteHandler=new SessionControllerRouteHandler(); }
public override void Init() { PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest; base.Init(); } void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e) { HttpContext.Current.SetSessionStateBehavior( SessionStateBehavior.Required); }
或者:session
public override void Init() { this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); base.Init(); }
在默認狀況下是沒有開啓的。SessionStateBehavior有四個值:ide
Disabled未啓用會話狀態來處理請求。 此設置將覆蓋已經過檢查請求的處理程序肯定的任何會話行爲。ui
ReadOnly爲請求啓用只讀會話狀態。這意味着會話狀態沒法更新。此設置將覆蓋已經過檢查請求的處理程序肯定的任何會話狀態行爲。this
Required爲請求啓用徹底的讀寫會話狀態行爲。 此設置將覆蓋已經過檢查請求的處理程序肯定的任何會話行爲。spa