Asp.Net Web API中使用Session,Cache和Application的几个方法
2024-10-16 02:52:29
在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);
}
最新文章
- 【BZOJ-3143】游走 高斯消元 + 概率期望
- 使用Python一步一步地来进行数据分析总结
- C++ 面向对象的三个特点--多态性(一)
- hdu 4248 A Famous Stone Collector
- BZOJ 1878 HH的项链
- WinForm实现简单的拖拽功能(C#)(2)
- Connect mysql on Linux from Windows
- 使用Express创建一个简单的示例
- Android应用程序绑定服务(bindService)的过程源代码分析
- 基于C++ 苹果apns消息推送实现(2)
- JavaNIO深入学习
- LAMP第三部分php,mysql配置
- [转]tomcat启动报错too low setting for -Xss
- FastDFS安装与使用
- design
- 攻打医院服务器的SamSam勒索木马分析
- SharePoint Framework 企业向导(八)
- php安装imagemagick扩展 常见问题与解决方案(win平台)
- Java 11 - Java String类
- JAVA框架 Spring 入门