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等状态数据。
+关注继续查看

    在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);
}

 

相关文章
|
1月前
|
开发框架 .NET 中间件
Swagger的 ASP.NET Core Web API 帮助页
使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战。 Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题。 它具有诸如交互式文档、客户端 SDK 生成和 API 可发现性等优点。
26 0
|
1月前
|
开发框架 JSON .NET
使用 ASP.NET Core 创建 Web API系列
使用 ASP.NET Core 创建 Web API系列
31 0
|
2月前
|
开发框架 JSON 算法
ASP.NET Core Web API之Token验证
ASP.NET Core Web API之Token验证
46 0
|
2月前
|
开发框架 JSON 前端开发
ASP.NET Web API入门介绍(一)
ASP.NET Web API入门介绍(一)
40 0
|
7月前
|
开发框架 JSON 前端开发
6.3 ASP.NET Core Web API技术选择
ASP.NET Core Web API技术选择
6.3 ASP.NET Core Web API技术选择
|
9月前
|
XML 开发框架 JSON
ASP.NET Core Web API 帮助页
ASP.NET Core Web API 帮助页
144 0
ASP.NET Core Web API 帮助页
|
开发框架 JavaScript 前端开发
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
349 0
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
|
开发框架 Oracle 前端开发
Oracle+ASP.Net Core Web API在云服务器上的部署
暑假数据库课程设计,我们小组选择vue+web api+Oracle开发网站,需要云服务器部署项目,对比后选择了阿里云服务器,并选择飞天加速计划——高校学生在家实践活动,一番摸索后实现了oracle数据库的建立与web api的发布,目前使用感觉良好。
Oracle+ASP.Net Core Web API在云服务器上的部署
|
存储 开发框架 安全
ASP.NET Core 3.0一个jwt的轻量角色/用户、单个API控制的授权认证库
ASP.NET Core 3.0一个jwt的轻量角色/用户、单个API控制的授权认证库
137 0
ASP.NET Core 3.0一个jwt的轻量角色/用户、单个API控制的授权认证库
|
JSON 开发框架 前端开发
小范笔记:ASP.NET Core API基础知识与Axios前端提交数据
小范笔记:ASP.NET Core API基础知识与Axios前端提交数据
681 0
小范笔记:ASP.NET Core API基础知识与Axios前端提交数据
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多