zoukankan      html  css  js  c++  java
  • Asp.Net Web API中使用Session,Cache和Application的几个方法

        在ASP.NET中,Web Api的控制器类派生于ApiController,该类与ASP.NET的Control类没有直接关系,因此不能像在Web MVC中直接使用HttpContext,Cache,Session等,要使用的话,一般是从System.Web.HttpContext.Current静态对象引用HttpContext,从而使用Session等状态数据。

        不过,要在控制器类中通过HttpContext的Session属性直接使用Session状态数据,将抛出nullreference异常,网查主要有两种解决方案,一个是重载Global的init()方法,在该方法中开放Session状态,另一个设计带Session的路由处理器

        重载Global的Init()

    public class WebApiApplication : System.Web.HttpApplication
    {
            public override void Init()
            {
                this.PostAuthorizeRequest += (y, z) => HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
                base.Init();
            }
            protected void Application_Start()
            {
                GlobalConfiguration.Configure(WebApiConfig.Register);
            }
    }

    设计路由处理器

      建立HttpControllerHandler和HttpControllerRouteHandler并覆写

     public class SessionStateRouteHandler : IRouteHandler
      {
            public IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                return new SessionableControllerHandler(requestContext.RouteData);
            }
     }
     public class SessionableControllerHandler:HttpControllerHandler,IRequiresSessionState
     {
            public SessionableControllerHandler(RouteData routeData)
                :base(routeData)
            {
    
            }
     }

       创建RouteConfig类型并配置路由

     public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection route)
            {
                route.MapHttpRoute(
                  name: "WebApiRoute1",
                  routeTemplate: "api/{controller}/{id}",
                  defaults: new { id = RouteParameter.Optional }
                ).RouteHandler = new SessionStateRouteHandler();
            }
        }

     在Global中注册配置

    protected void Application_Start()
    {
                // GlobalConfiguration.Configure(WebApiConfig.Register);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
  • 相关阅读:
    微信小程序开发规范文档-WXSS注释规范
    微信小程序开发规范文档-注意事项
    微信小程序开发规范文档-项目结构
    微信小程序开发规范文档
    使用 VS Code 编写小程序的姿势
    Github 生成SSH秘钥(详细教程)
    (6)关于存储引擎
    (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)
    (12)协程
    (3)数据库的建立和数据表的操作
  • 原文地址:https://www.cnblogs.com/yan7/p/7800122.html
Copyright © 2011-2022 走看看