开发者社区> 莫问今朝乄> 正文

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

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
6.3 ASP.NET Core Web API技术选择
ASP.NET Core Web API技术选择
61 0
6.1 ASP.NET Core Web 入门
ASP.NET Core中,严格来讲只有一个Asp.net Core MVC一个框架,Asp.net Core MVC既支持基于视图的MVC开发,也支持Web API和Razor Pages开发。
71 0
ASP.NET Core Web API 帮助页
ASP.NET Core Web API 帮助页
115 0
【浅谈ASP.NET】——Web服务应用实例
【浅谈ASP.NET】——Web服务应用实例
76 0
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
273 0
Oracle+ASP.Net Core Web API在云服务器上的部署
暑假数据库课程设计,我们小组选择vue+web api+Oracle开发网站,需要云服务器部署项目,对比后选择了阿里云服务器,并选择飞天加速计划——高校学生在家实践活动,一番摸索后实现了oracle数据库的建立与web api的发布,目前使用感觉良好。
161 0
Asp.Net Web 项目部署到阿里云 Windows版本服务器
Asp.Net Web 项目部署到阿里云 Windows版本服务器 前言:网上Asp.Net Web 项目部署到阿里云 Windows版本服务器的说法不一,最后参考多方上传后终于部署成功,写此文章总结一下网上的知识和自己的部署经验,以防自己忘记 工具 1. Visual Stuio 2019 2. sql server2019 3. 阿里云服务器 ECS 4. windows 11家庭版
199 0
ASP.NET Core 编码、web编码、网页编码System.Text.Encodings.Web
ASP.NET Core 编码、web编码、网页编码System.Text.Encodings.Web
106 0
ASP.NET Core+Quartz.Net实现web定时任务
此处我们的项目使用稍复杂的Quartz.net实现web定时任务。
562 0
+关注
莫问今朝乄
三人行,必有我师
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PWA:移动Web的现在与未来
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多