了解Global.asax中的路由(asp.net-mvc)

时间:2009-07-28 07:39:52

标签: asp.net-mvc url-routing global-asax

在Global.asax中,以下内容表示什么?

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     

4 个答案:

答案 0 :(得分:11)

这是学习MVC真正令人沮丧的事情之一 - 这个功能的文档非常糟糕 - 那里几乎没有任何东西:http://msdn.microsoft.com/en-us/library/dd470170(VS.100).aspx

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

这允许所有的something.axd文件在MVC之外运行 - 最后“{* pathInfo}”允许忽略查询字符串(它是一种通配符)。

请注意,这不会将任何此类通配符应用于路径,因此:

trace.axd?clear=1 //excluded from MVC

mySubFolder/customResource.axd //MVC passed to mySubFolderController.customResource()

有用的。除了“{resource}”和“{* pathInfo}”

之外,我一直无法找到任何关于确切含义和不支持关键字的文档。

然而,几乎完全没有文档记录的功能可以让您更好地控制这些被忽略的路线:

//ignore all WebForms .aspx/.asmx/.ashx calls anywhere
routes.IgnoreRoute( "{*allaspx}", new { allaspx = @".*\.as[pmh]x(/.*)?" } );

如果您使用属性传递anon-initialised对象,则该属性将成为您可以在路径中使用的关键字。

你不能在路线中传递正则表达式,但你可以在这个anon属性中。

答案 1 :(得分:3)

.axd文件是由HTTP处理程序处理的虚拟文件。它们用于(除其他外)向网页提供各种资源,例如为AJAX控件自动生成的javascript等。

由于这些是虚拟文件,因此您不希望路由引擎尝试将这些请求映射到控制器。您需要它们直接由ASP.NET执行。

这就是线路达到的目的。

答案 2 :(得分:2)

如果没有这个ASP.NET,会尝试将所有请求映射到AXD处理程序到控制器和操作。使用ignoreRoute意味着URL不会按照默认行为将URL映射到控制器。

答案 3 :(得分:0)

它告诉路由引擎忽略此请求并将其留给ASP.NET Webforms来处理事情。

这对于使用处理程序elmah.axd的示例ELMAH日志记录非常有用。