MVC 4 WebApi開発でSessionをサポートしたい場合は以下の点をご質問ください
3267 ワード
1.WebApiConfigでHttpControllerHandlerとHttpControllerRouteHandlerを確立して上書きする
Routes.MapHttpRouteは、次の形式に変更します.
2、MVCのWebApiではセッションサポートがデフォルトでオンになっていません.GlobalでInitメソッドを書き換えて、セッションでサポートするタイプを指定する必要があります.
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);
}