前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET WebAPI中使用Session使用

.NET WebAPI中使用Session使用

作者头像
追逐时光者
发布2019-08-28 12:16:23
2.3K0
发布2019-08-28 12:16:23
举报
文章被收录于专栏:编程进阶实战编程进阶实战

问题及其解决方案:

今天做项目的时候因为需要编写一个短信验证码的接口我需要在我的后台.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);
}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题及其解决方案:
  • 首先添加WEB API自定义路由:
  • 首先重写Global.asax:
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档