ASP .NET - Web Api - Session

资料参考自: 

http://www.cnblogs.com/tinya/p/4563641.html

http://www.cnblogs.com/firstcsharp/p/4482835.html

http://www.cnblogs.com/ca47/p/4603701.html

 

在 WebApi 中

Sessoin 是无法使用的 ( HttpContext.Current.Session == null )

以下几个步骤可以让 WebApi 开启对 Session 的支持

 

第一步. 在 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();
}

 

第三步. 在 Global 中重写 init 方法

public override void Init()
{
    PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;
    base.Init();
}

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

或者 

public override void Init()
{
    this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
    base.Init();
}

 

 

在默认情况下是没有开启的。SessionStateBehavior有四个值:

 

Default使用默认ASP.NET逻辑来确定请求的会话状态行为。默认逻辑是寻找IHttpHandler中是否存在标记会话状态接口。

Disabled未启用会话状态来处理请求。 此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。

ReadOnly为请求启用只读会话状态。这意味着会话状态无法更新。此设置将覆盖已通过检查请求的处理程序确定的任何会话状态行为。

Required为请求启用完全的读写会话状态行为。 此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。

 

posted @ 2017-06-22 15:57  `Laimic  阅读(184)  评论(0)    收藏  举报