zoukankan      html  css  js  c++  java
  • .Net WebApi中使用Session使用

    问题及其解决方案:

      今天做项目的时候因为需要编写一个短信验证码的接口我需要在我的后台.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);
    }
    }

     

  • 相关阅读:
    ASP.NET 防盗链的实现[HttpHandler]
    html打印表格每页都有的表头和打印分页
    spring是怎样管理mybatis的及注入mybatis mapper bean的
    浅谈Log4j和Log4j2的区别
    git tag — 标签相关操作
    java cocurrent包
    线程实现异步
    使用Shell脚本查找程序对应的进程ID,并杀死进程
    shell脚本监测文件变化
    spring boot的几种配置类型
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/10555637.html
Copyright © 2011-2022 走看看