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);
    }
    }

     

  • 相关阅读:
    HTML5结构
    HTML5新增的非主体元素header元素、footer元素、hgroup元素、adress元素
    CF GYM 100703G Game of numbers
    CF GYM 100703I Endeavor for perfection
    CF GYM 100703K Word order
    CF GYM 100703L Many questions
    CF GYM 100703M It's complicate
    HDU 5313 Bipartite Graph
    CF 560e Gerald and Giant Chess
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/10555637.html
Copyright © 2011-2022 走看看