【问题标题】:How to call a HttpHandler via JQuery in MVC如何在 MVC 中通过 JQuery 调用 HttpHandler
【发布时间】:2013-04-30 08:57:32
【问题描述】:

我之前没有在 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>

【问题讨论】:

    标签: jquery asp.net-mvc httphandler


    【解决方案1】:

    尝试忽略路由中的 .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 文件。如果您希望它在所有子目录中工作,请尝试以下操作(此技巧归功于 this answer):

    routes.IgnoreRoute("{*allashx}", new { allashx = @".*\.ashx(/.*)?" });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      相关资源
      最近更新 更多