由于我们需要异步 Ajax 请求,因此需要禁用会话状态。Web 应用程序基于 ASP.Net 4 - MVC 2。
我知道[SessionState(SessionStateBehavior.Disabled)]
,但是它在 MVC 3+ 中可用。
我正在使用以下方法将特定的 HTTP 请求路由到无会话 HTTPContext [源]:
public class CustomRouteHandler : IRouteHandler
{
public System.Web.IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.HttpContext.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly);
return new MvcHandler(requestContext);
}
}
在 Global.asax 中:
routes.MapRoute( _
Nothing, _
"ajaxrequest/{id}", _
New With {.controller = "AjaxEngine", .action = "Index", .id = UrlParameter.Optional}, _
New SessionLessRouteHandler()
)
结果?代码编译正确,运行时没有错误。但是,它并没有改变任何东西,并且在每个 Ajax 请求的 HTTP 标头中,我都会看到一个带有新会话的新 set-cookie。例如,一个浏览器可能会请求 100 个 Ajax 请求,并且会为每个请求生成一个新的会话。而且我从不需要会话来处理静态 Ajax 请求。我在 Chrome 网络监视器诊断的每个 Ajax 请求中看到以下行:
Set-Cookie:ASP.NET_SessionId=xlgxdzdxdeilws23prjns3cv; domain=mydomain.com; path=/
知道为什么它不起作用吗?以及如何避免为请求创建新会话?
- 我尝试了 Rick 的其他解决方案,但结果与上述相同。