这两个ASP.NET MVC IgnoreRoute指令有什么区别?

cki*_*tel 7 .net asp.net-mvc ignoreroute asp.net-mvc-routing

默认的ASP.NET MVC 3项目模板包含以下IgnoreRoute指令:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)

我现在看到多个项目改变了这一行(包括StackExchange的DataExplorer),而不是看起来像:

routes.IgnoreRoute("{*allaxd}", new {allaxd = @".*\.axd(/.*)?"});
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释在什么情况下或一般情况下为什么默认.axd路由忽略不适合后一个版本? 或者反过来说,为什么人们会选择不使用后一个版本而只是坚持默认?

我不得不承认我不完全理解IgnoreRoute语法,关于这个主题MSDN文档非常简洁.

Cra*_*ntz 6

Phil Haack的博客中有一个解释:使路由忽略文件扩展的请求

引用菲尔的基本想法是:

对此的一个解决方案是添加适当的忽略路由以指示路由应忽略这些请求.不幸的是,我们做不到这样的事情:

{*path}.aspx/{*pathinfo}
Run Code Online (Sandbox Code Playgroud)

我们只允许一个catch-all路由,它必须发生在URL的末尾.但是,您可以采取以下方法....

我在这里做的是Eilon向我展示的一种技术,即将所有URL映射到这些路由,然后通过约束字典限制忽略哪些路由.因此,在这种情况下,这些路由将匹配(并因此忽略)对favicon.ico的所有请求(无论哪个目录)以及对.aspx文件的请求.由于我们告诉路由忽略这些请求,因此将发生这些请求的正常ASP.NET处理.