溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c#如何在WebAPI使用Session

發(fā)布時間:2021-08-09 14:27:33 來源:億速云 閱讀:148 作者:小新 欄目:編程語言

這篇文章主要介紹了c#如何在WebAPI使用Session,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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

查過一些文章才發(fā)現(xiàn)需要在注冊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邏輯來確定請求的會話狀態(tài)行為。默認邏輯是尋找IHttpHandler中是否存在標(biāo)記會話狀態(tài)接口。

  • Disabled未啟用會話狀態(tài)來處理請求。 此設(shè)置將覆蓋已通過檢查請求的處理程序確定的任何會話行為。

  • ReadOnly為請求啟用只讀會話狀態(tài)。這意味著會話狀態(tài)無法更新。此設(shè)置將覆蓋已通過檢查請求的處理程序確定的任何會話狀態(tài)行為。

  • Required為請求啟用完全的讀寫會話狀態(tài)行為。 此設(shè)置將覆蓋已通過檢查請求的處理程序確定的任何會話行為。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“c#如何在WebAPI使用Session”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI