3

我以前没有在 MVC 中使用过 httpHandlers。但是我想在我的应用程序中停止会话超时。我在这里找到了解决方案; http://www.dotnetcurry.com/ShowArticle.aspx?ID=453

但是,随着我的暗示,我收到了错误消息

找不到路径“/Shared/KeepSessionAlive.ashx”的控制器或未实现 IController

所以jquery;

$.post("/Shared/KeepSessionAlive.ashx", null, function () {
    $("#result").append("<p>Session is alive and kicking!<p/>");
});

正在寻找控制器。如何停止此操作并改为执行处理程序代码?

我试着把它放在我的 web.config 中;

<httpHandlers>
    <add verb="*" path="KeepSessionAlive.ashx" type="XXXXXX.Views.Shared.KeepSessionAlive"/>
</httpHandlers>
4

1 回答 1

3

尝试忽略路由中的 .ashx 文件,因此 MVC 不会尝试将其路由到控制器操作:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("Shared/{resource}.ashx/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

这将导致 MVC 路由忽略 /shared/ 中的 .ashx 文件;但是,它不适用于其他地方的 .ashx 文件。如果您希望它在所有子目录中工作,请尝试以下操作(将此技巧归功于此答案):

routes.IgnoreRoute("{*allashx}", new { allashx = @".*\.ashx(/.*)?" });
于 2013-04-30T09:01:57.423 回答