国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#在WebAPI使用Session的方法

2019-10-29 19:59:40
字體:
來源:轉載
供稿:網友

最近在改寫WebApp時要將以前用泛型處理例程寫的Captcha 改成使用WebApi 來實作機制,在實作的過程中發現使用IRequiresSessionState session也無法使用(context.Session==null)

查過一些文章才發現需要在注冊api路由需將RouteHandler 改寫,才能使用。以下用ASP.net MVC 4來說明要實作的部分

建立HttpControllerHandler和HttpControllerRouteHandler 并覆寫它

  public class SessionRouteHandler : HttpControllerHandler, IRequiresSessionState  {    public SessionRouteHandler(RouteData routeData) : base(routeData)    {    }  }  public class SessionControllerRouteHandler : HttpControllerRouteHandler  {    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)    {      return new SessionRouteHandler(requestContext.RouteData);    }  }

在WebApiConfig中將config.Routes.MapHttpRoute 改成

RouteTable.Routes.MapHttpRoute(using System.Web.Routing)并指定RouteHandler

public static void Register(HttpConfiguration config){  RouteTable.Routes.MapHttpRoute(  name: "DefaultApi",  routeTemplate: "api/{controller}/{id}",  defaults: new { id = RouteParameter.Optional }  ).RouteHandler=new SessionControllerRouteHandler();}

或者 在MVC的WebApi中默認是沒有開啟Session會話支持的。需要在Global中重寫Init方法來指定會話需要支持的類型

public override void Init()    {      PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;      base.Init();    }    void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)    {      HttpContext.Current.SetSessionStateBehavior(        SessionStateBehavior.Required);    }

或者:

    public override void Init()    {      this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);      base.Init();    }

在默認情況下是沒有開啟的。SessionStateBehavior有四個值:

  • Default使用默認ASP.NET邏輯來確定請求的會話狀態行為。默認邏輯是尋找IHttpHandler中是否存在標記會話狀態接口。
  • Disabled未啟用會話狀態來處理請求。 此設置將覆蓋已通過檢查請求的處理程序確定的任何會話行為。
  • ReadOnly為請求啟用只讀會話狀態。這意味著會話狀態無法更新。此設置將覆蓋已通過檢查請求的處理程序確定的任何會話狀態行為。
  • Required為請求啟用完全的讀寫會話狀態行為。 此設置將覆蓋已通過檢查請求的處理程序確定的任何會話行為。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太原市| 达尔| 松潘县| 肃宁县| 嘉兴市| 会昌县| 建始县| 方正县| 卢湾区| 额济纳旗| 深水埗区| 延吉市| 银川市| 寿阳县| 江山市| 通化市| 三明市| 铜梁县| 长海县| 宁远县| 望江县| 土默特右旗| 红原县| 哈巴河县| 大竹县| 株洲县| 奉化市| 巴青县| 杨浦区| 永城市| 清苑县| 常山县| 高碑店市| 灵丘县| 彝良县| 盈江县| 荣成市| 麦盖提县| 津市市| 互助| 新昌县|