Asp.net mvc 2 无会话ASP.NET MVC 2请求还没有会话
由于我们需要异步Ajax请求,因此需要禁用会话状态。Web应用程序基于ASP.NET4-MVC2 我知道Asp.net mvc 2 无会话ASP.NET MVC 2请求还没有会话,asp.net-mvc-2,session-less,Asp.net Mvc 2,Session Less,由于我们需要异步Ajax请求,因此需要禁用会话状态。Web应用程序基于ASP.NET4-MVC2 我知道[SessionState(SessionStateBehavior.Disabled)],但它在MVC 3+中可用 我使用以下方法将特定HTTP请求路由到无会话HTTPContext: 公共类CustomRouteHandler:IRouteHandler { public System.Web.IHttpHandler GetHttpHandler(RequestContext Reque
[SessionState(SessionStateBehavior.Disabled)]
,但它在MVC 3+中可用
我使用以下方法将特定HTTP请求路由到无会话HTTPContext:
公共类CustomRouteHandler:IRouteHandler
{
public System.Web.IHttpHandler GetHttpHandler(RequestContext RequestContext)
{
requestContext.HttpContext.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly);
返回新的MvcHandler(requestContext);
}
}
在Global.asax中:
routes.MapRoute(_
没什么_
“ajaxrequest/{id}”_
新增了{.controller=“AjaxEngine”、.action=“Index”、.id=UrlParameter.Optional}_
新的无会话RouteHandler()
)
结果如何?
代码编译正确,运行时没有错误。但是,它不会改变任何东西,在每个Ajax请求的HTTP头中,我都会看到一个带有新会话的新集合cookie。例如,浏览器可能会请求100个Ajax请求,并且会为每个请求生成一个新会话。对于静态Ajax请求,我从不需要会话。我在Chrome Network Monitor诊断的每个Ajax请求中看到以下行:
Set Cookie:ASP.NET_SessionId=xlgxdzdxdeilws23prjns3cv;domain=mydomain.com;路径=/
知道它为什么不起作用吗?如何避免为请求创建新会话
- 我试过Rick,但结果与上面相同
- 这是由于一个错误,
路由。MapRoute
接受新的IRouteHandler
,但它不合适。您只需使用routes来设置RouteHandler。添加而不是Global.asax中的routes.MapRoute
:
routes.Add(无,新路由(“ajaxrequest/{id}”),新
RouteValueDictionary(带有{_
Key.controller=“AjaxEngine”_
Key.action=“Index”_
Key.id=UrlParameter.Optional_
}),新的SessionLessRouteHandler())
注意:通过使用只读会话状态,它将继续设置cookie。在我们定义的RouteHandler类中,需要将其设置为禁用