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中是否存在標記會話狀態(tài)接口。
- Disabled未啟用會話狀態(tài)來處理請求。 此設(shè)置將覆蓋已通過檢查請求的處理程序確定的任何會話行為。
- ReadOnly為請求啟用只讀會話狀態(tài)。這意味著會話狀態(tài)無法更新。此設(shè)置將覆蓋已通過檢查請求的處理程序確定的任何會話狀態(tài)行為。
- Required為請求啟用完全的讀寫會話狀態(tài)行為。 此設(shè)置將覆蓋已通過檢查請求的處理程序確定的任何會話行為。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
WinForm實現(xiàn)為TextBox設(shè)置水印文字功能
這篇文章主要介紹了WinForm實現(xiàn)為TextBox設(shè)置水印文字功能,很實用的一個技巧,需要的朋友可以參考下2014-08-08
C#實現(xiàn)TreeView節(jié)點拖拽的方法
這篇文章主要介紹了C#實現(xiàn)TreeView節(jié)點拖拽的方法,涉及C#針對TreeView節(jié)點的動態(tài)添加及移除技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09
C#實現(xiàn)ArrayList動態(tài)數(shù)組的示例
ArrayList是一個動態(tài)數(shù)組,可以用來存儲任意類型的元素,本文就來介紹一下C#實現(xiàn)ArrayList動態(tài)數(shù)組的示例,具有一定的參考價值,感興趣的可以了解一下2023-12-12

