asp.net webapi 启用session

背景交代:因为项目中集成了第三方的东西,所以Global.asax没有启用,需要在WebApiConfig中添加配置

 

1、建立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);

        }

    }
View Code

2、在WebApiConfig中将  config.Routes.MapHttpRoute 改成   RouteTable.Routes.MapHttpRoute(using System.Web.Routing)并指定RouteHandler

public static void Register(HttpConfiguration config)
{
   RouteTable.Routes.MapHttpRoute(

   name: "DefaultApi",

   routeTemplate: "api/{controller}/{id}",

   defaults: new { id = RouteParameter.Optional }

   ).RouteHandler=new SessionControllerRouteHandler();
}
View Code

3、做完配置后就可以在项目中使用Session存储验证码或者其他内容了

 

如果项目使用了默认的Global.asax文件,则在Glob类中重写Init()方法即可,如下

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

 

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

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

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

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

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

 

转自:https://www.cnblogs.com/icebutterfly/p/7803332.html

posted @ 2020-09-16 10:05  狼窝窝  阅读(288)  评论(0)    收藏  举报