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

热门文章

  1. 【Win 10 应用开发】UI Composition 札记(七):基于表达式的动画
  2. JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort
  3. Python第一天自学,变量,基本数据类型
  4. linux使用yum安装mariadb
  5. AIO5系统中-打印样式常见问题处理
  6. JS获取URL参数的值
  7. MatlabR2015b用了一段时间之后需要重新激活
  8. ES6这些就够了
  9. 可靠的、可扩展的、可维护的数据系统 ------《Designing Data-Intensive Applications》读书笔记1
  10. 【原创】1、简单理解微信小程序