Routing ASP.NET 4路由捕获所有

Routing ASP.NET 4路由捕获所有,routing,webforms,http-status-code-404,asp.net-4.0,Routing,Webforms,Http Status Code 404,Asp.net 4.0,我有一个使用路由的ASP.NET 4 WebForms应用程序。我想了解不存在的路线的404: RouteTable.Routes.MapPageRoute("404", "{*url}", "~/error"); 问题是,这还会导致像ImageHandler.ashx和Resource.axd这样的页面映射到/错误 所以我补充说: RouteTable.Routes.Ignore("{resource}.axd"); RouteTable.Routes.Ignore(

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

    RouteTable.Routes.MapPageRoute("404", "{*url}", "~/error");
问题是,这还会导致像ImageHandler.ashx和Resource.axd这样的页面映射到/错误

所以我补充说:

    RouteTable.Routes.Ignore("{resource}.axd");
    RouteTable.Routes.Ignore("{handler}.ashx");
但这只会忽略根目录中的Resource.axd,而不会忽略例如/scripts/Resource.axd中的Resource.axd

我怎样才能做到这一点?或者我应该为catch all PageRoute设置哪些限制,使其只捕获目录?

您尝试过这个吗

RouteTable.Routes.Ignore("{*resource}.axd");
RouteTable.Routes.Ignore("{*handler}.ashx");
你试过这个吗

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

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

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

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

我不太了解IgnoreRoutes和IgnoreRoutes,因此可能会有一个更好/更少贪婪的解决方案,但它正在工作。

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

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

routes.Ignore("{*allaxd}", new { allaxd = @".*\.axd(/.*)?" });
我不太了解Ignore和IgnoreRoutes,因此可能会有更好/更少贪婪的解决方案,但它正在发挥作用