无会话 HttpHandler 和路由到仅一个控制器 .NET 的自定义处理程序
Session-less HttpHandler and routing to custom handler for only one controller .NET
我们有一个 Web 应用程序,它会每 30 秒对服务器进行一次 AJAX 调用,以更新页面中的值。该应用程序本身是 MVC 和 webforms 的混合体(该应用程序的一部分已升级为 MVC,而另一部分仍然是遗留的)。 AJAX 调用的问题是它将重置会话超时,基本上不允许用户超时。我发现的解决方法来自这个答案 (Disable Session state per-request in ASP.Net MVC),它是创建一个不使用 Session 的新处理程序。这应该可以解决问题。
虽然我的第二个问题是应用程序似乎没有遵循我的新路由规则,因为它是唯一使用此 "session-less" 处理程序的控制器:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FirstController", action = "Index", id = UrlParameter.Optional }
);
routes.Add("Sessionless", new Route("SessionlessController/SessionlessAction/{id}",
new RouteValueDictionary(new { id= UrlParameter.Optional }),
new SessionlessHandler()));
我的处理程序上有一个断点,但应用程序似乎没有转到处理程序:
public class SessionlessHandler: IRouteHandler {
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
return null;
}
}
我希望只有我的 "session-less" 控制器会使用这个自定义处理程序,而所有其他控件都使用默认值。
您需要颠倒路线的顺序,以便最具体的路线在 之前 执行常规 Default
路线。
routes.Add("Sessionless", new Route("SessionlessController/SessionlessAction/{id}",
new RouteValueDictionary(new { id= UrlParameter.Optional }),
new SessionlessHandler()));
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FirstController", action = "Index", id = UrlParameter.Optional }
);
有关完整说明,请参阅 。
我们有一个 Web 应用程序,它会每 30 秒对服务器进行一次 AJAX 调用,以更新页面中的值。该应用程序本身是 MVC 和 webforms 的混合体(该应用程序的一部分已升级为 MVC,而另一部分仍然是遗留的)。 AJAX 调用的问题是它将重置会话超时,基本上不允许用户超时。我发现的解决方法来自这个答案 (Disable Session state per-request in ASP.Net MVC),它是创建一个不使用 Session 的新处理程序。这应该可以解决问题。
虽然我的第二个问题是应用程序似乎没有遵循我的新路由规则,因为它是唯一使用此 "session-less" 处理程序的控制器:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FirstController", action = "Index", id = UrlParameter.Optional }
);
routes.Add("Sessionless", new Route("SessionlessController/SessionlessAction/{id}",
new RouteValueDictionary(new { id= UrlParameter.Optional }),
new SessionlessHandler()));
我的处理程序上有一个断点,但应用程序似乎没有转到处理程序:
public class SessionlessHandler: IRouteHandler {
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
return null;
}
}
我希望只有我的 "session-less" 控制器会使用这个自定义处理程序,而所有其他控件都使用默认值。
您需要颠倒路线的顺序,以便最具体的路线在 之前 执行常规 Default
路线。
routes.Add("Sessionless", new Route("SessionlessController/SessionlessAction/{id}",
new RouteValueDictionary(new { id= UrlParameter.Optional }),
new SessionlessHandler()));
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FirstController", action = "Index", id = UrlParameter.Optional }
);
有关完整说明,请参阅