MVC 4 WebApi開発でSessionをサポートしたい場合は以下の点をご質問ください

3267 ワード

1.WebApiConfigでHttpControllerHandlerとHttpControllerRouteHandlerを確立して上書きする
 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);
            }
        }

Routes.MapHttpRouteは、次の形式に変更します.
 public static void Register(HttpConfiguration config)
        {
            RouteTable.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            ).RouteHandler = new SessionControllerRouteHandler();
        }

2、MVCのWebApiではセッションサポートがデフォルトでオンになっていません.GlobalでInitメソッドを書き換えて、セッションでサポートするタイプを指定する必要があります.
        public override void Init()
        {
            PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;
            base.Init();
        }

        void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
        {
            HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
        }