【问题标题】:ASP.NET 4 Routing catch allASP.NET 4 路由包罗万象
【发布时间】:2011-04-02 19:11:18
【问题描述】:

我有一个使用路由的 ASP.NET 4 WebForms 应用程序。我想为不存在的路线捕获 404:

    RouteTable.Routes.MapPageRoute("404", "{*url}", "~/error");

问题是,这也会导致像ImageHandler.ashxResource.axd 这样的页面映射到/error

所以我添加了这个:

    RouteTable.Routes.Ignore("{resource}.axd");
    RouteTable.Routes.Ignore("{handler}.ashx");

但这只会忽略根目录中的 Resource.axd,而不是例如 /scripts/Resource.axd

我怎样才能做到这一点?或者我应该为捕获所有 PageRoute 设置什么约束,以便它只会捕获目录?

【问题讨论】:

    标签: routing webforms http-status-code-404 asp.net-4.0


    【解决方案1】:

    我在混合 WebForms/MCV3 应用程序中发现了一个类似的问题,这让我想到了这个问题。基本上只有根级别的 axd 文件被正确处理,除此之外的任何东西都试图被路由到控制器。

    我的情况可能不同,但最后我发现这样做很有效:

    routes.Ignore("{*allaxd}", new { allaxd = @".*\.axd(/.*)?" });
    

    我对 Ignore 和 IgnoreRoutes 了解不多,因此可能会有更好/不那么贪婪的解决方案,但它确实有效。

    【讨论】:

      【解决方案2】:

      你试过了吗?

      RouteTable.Routes.Ignore("{*resource}.axd");
      RouteTable.Routes.Ignore("{*handler}.ashx");
      

      【讨论】:

        猜你喜欢
        • 2016-08-20
        • 2011-10-13
        • 2021-09-09
        • 1970-01-01
        • 1970-01-01
        • 2020-02-23
        • 1970-01-01
        • 2016-02-22
        • 2021-08-17
        相关资源
        最近更新 更多