什么是routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
我在项目中找不到任何.axd文件,我可以删除此路由规则吗?
答案 0 :(得分:72)
.axd文件在物理上不存在。 ASP.NET在内部使用带有.axd扩展名的URL(ScriptResource.axd和WebResource.axd),它们由HttpHandler处理。
因此,您应该遵守此规则,以防止ASP.NET MVC尝试处理请求,而不是让专用的HttpHandler执行此操作。
答案 1 :(得分:20)
一些背景
如果您打开此文件:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
你会在文件中找到它:
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
这基本上是告诉Asp.NET运行时:&#34;嘿asp.net dude,如果请求来自WebResource.axd,那么使用AssemblyResourceLoader来处理请求。&#34;
请注意 WebResource.axd 不是文件,而只是AssemblyResourceLoader
的地图(如果我可以说)。它是处理程序注册的名称。在我的机器上,我找到了以下.axd处理程序:
<add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
<add verb="*" path="*_AppService.axd"
好的,那个处理程序做了什么?
AssemblyResourceLoader
知道如何在程序集中查找嵌入文件,以便它可以为其提供服务(将其发送到客户端,即浏览器)。例如,在asp.net Web表单中,如果使用验证控件,它们依赖于某些javascript来显示网页上的错误。但是,javascript嵌入在程序集中。浏览器需要javascript,所以你会在页面的html中看到这个:
<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
AssemblyResourceLoader
将使用查询字符串中的信息找到嵌入javascript的程序集并返回javascript。
返回问题
所以回答这个问题是什么:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
这告诉路由引擎我们不会处理那些匹配该路由模式的请求。换句话说,我们不会处理.axd
个请求。为什么?因为MVC本身是类似于.axd
和.aspx
的HttpHandler以及web.config文件中的许多其他处理程序。 MVC处理程序不知道如何处理请求,例如在程序集中查找嵌入式资源 - AssemblyResourceLoader
知道如何执行此操作。 MVC知道如何做,以及它所做的一切都超出了这个问题和答案的范围。
Here是一篇很棒的文章,详细解释了.axd
。
答案 2 :(得分:18)
包含模式{resource} .axd / {* pathInfo}的路由,以防止将Web资源文件(如WebResource.axd或ScriptResource.axd)的请求传递给控制器。
阅读链接: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
您还可以指定路由不应处理某些URL请求。您可以通过定义路由并指定应使用StopRoutingHandler类来处理该模式来阻止路由处理某些请求。当StopRoutingHandler对象处理请求时,StopRoutingHandler对象会阻止对请求的任何其他处理作为路由。而是将请求作为ASP.NET页面,Web服务或其他ASP.NET端点处理。您可以使用RouteCollection.Ignore方法(或RouteCollectionExtensions.IgnoreRoute用于MVC应用程序)来创建使用StopRoutingHandler类的路由。
答案 3 :(得分:7)
请查看以下链接: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
答案 4 :(得分:7)
这些不是文件(它们不存在于磁盘上) - 它们只是注册某些HTTP处理程序的名称。