Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 2 无会话ASP.NET MVC 2请求还没有会话_Asp.net Mvc 2_Session Less - Fatal编程技术网

Asp.net mvc 2 无会话ASP.NET MVC 2请求还没有会话

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

由于我们需要异步Ajax请求,因此需要禁用会话状态。Web应用程序基于ASP.NET4-MVC2

我知道
[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类中,需要将其设置为禁用