.Net WebApi中使用Session使用
2023-02-18 16:31:47 时间
问题及其解决方案:
今天做项目的时候因为需要编写一个短信验证码的接口我需要在我的后台.net webapi中存入我随机生成的短信验证码方便与前端传递过来的数据对比,所以决定使用session做缓存。但是没想到的是我调用都是都是为空的。让后在网上找了下原因是因为Web Api的控制器类派生自ApiControll它只继承了IHttpController, IDisposable这两个接口,与 MVC Controll类没有直接关系,因此不能像在ASPX.CS代码隐藏类中直接使用HttpContext、HttpApplicationState或HttpSessionState等状态数据。要使用的话,一般是从System.Web.HttpContext.Current静态对象引用HttpContext,从而使用Session等状态数据。所以接下来我们需要做的是重写Global.asax中的方法,通过路由重写启用WEB API 中的session会话。
首先添加WEB API自定义路由:
public static class WebApiConfig { public static string UrlPrefix { get { return "api"; } } /// <summary> /// 配合Gloabl.cs项目启动时默认调用 /// </summary> public static string UrlPrefixRelative { get { return "~/api"; } } public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultAreaApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); //设置路由获取调转方式 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
首先重写Global.asax:
public class MvcApplication : System.Web.HttpApplication { /// <summary> /// 开始session会话 /// </summary> protected void Application_PostAuthorizeRequest() { if (IsWebApiRequest()) { HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); } } /// <summary> /// 匹配WebApiconfig自定义路由规格 /// </summary> /// <returns></returns> private bool IsWebApiRequest() { return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(WebApiConfig.UrlPrefixRelative); } }
相关文章
- DDD 主题交流会总结及计划
- Visual Studio for Mac 初体验
- ASP.NET 5 RC1 升级 ASP.NET Core 1.0 RC2 记录
- IDDD 实现领域驱动设计-SOA、REST 和六边形架构
- Spring Cloud 微服务架构全链路实践
- 搭建 RabbitMQ Server 高可用集群
- DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(3)
- ASP.NET Core CORS 简单使用
- 理解 .NET Platform Standard
- Microsoft Build 2016 Day 1 记录
- 分享一个 @user 前端插件
- IDDD 实现领域驱动设计-理解限界上下文
- DDD 领域驱动设计-在动手之前,先把你的脑袋清理干净
- 浮沉乱世,一些话对自己说
- 微服务(Microservices)和服务网格(Service Mesh)架构概念整理
- 分布式、集群和微服务概念整理
- DDD 领域驱动设计-两个实体的碰撞火花
- EF DbContext.Configuration.ProxyCreationEnabled 什么鬼?
- 跌倒了,再爬起来:ASP.NET 5 Identity
- ASP.NET MVC中使用Unity Ioc Container