2012-01-26 64 views

回答

65

.axd文件在物理上不存在。 ASP.NET在内部使用带有.axd扩展名的URL(ScriptResource.axd和WebResource.axd),并且它们由HttpHandler处理。

因此,您应该遵守此规则,以防止ASP.NET MVC尝试处理请求,而不是让专用的HttpHandler执行此操作。

+4

我敢肯定你会希望人们能够下载你的网站上的“axd文件”,因为它们包含JavaScript和样式。 – Moulde

+1

这个答案不正确。将“IgnoreRoute”放入MVC的路由配置中的原因是为了确保MVC不会尝试处理请求。这是因为'.axd'端点需要由另一个HTTP处理程序(一个处理程序,它不是* MVC的一部分)来处理,以便为脚本提供服务。 – NightOwl888

16

与模式{}资源的途径个.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方法(或用于MVC应用程序的RouteCollectionExtensions.IgnoreRoute)来创建使用StopRoutingHandler类的路由。

7

这些不是文件(它们不存在于磁盘上) - 它们只是一些HTTP处理程序注册的名称。

+0

我会说最相关的答案。 – Sakthivel

8

一些背景

如果你打开这个文件:

<add path="WebResource.axd" 
    verb="GET" 
    type="System.Web.Handlers.AssemblyResourceLoader" 
    validate="True" /> 

,基本上是告诉Asp.NET运行时:

%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config 

你会在文件中找到这:“嘿,asp.net伙计,如果WebResource.axd请求来了,那么使用AssemblyResourceLoader来处理请求。”

请不要注意,WebResource.axd的不是一个文件,只是一个地图(恕我直言)到。这是处理程序注册的名称。在我的机器,我发现下面的个.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" 

好了,这是什么处理器吗?

知道如何在程序集中查找嵌入文件,以便它可以提供它(将其发送到客户端,即浏览器)。例如,在asp.net web表单中,如果您使用验证控件,则它们依赖于某些javascript来显示网页上的错误。但是,该JavaScript嵌入在程序集中。浏览器需要的JavaScript,所以你会看到这个页面的HTML:

<script src="/YourSite/WebResource.axd?d=fs7zUa...&amp;t=6342..." type="text/javascript"></script> 

的会发现其中的JavaScript使用的查询字符串信息嵌入和返回的JavaScript装配。


回到问题

因此,要回答这个问题,什么是:

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

这是告诉我们不会是路由引擎处理那些符合该路由模式的请求。换句话说,我们不会处理.axd请求。为什么?因为MVC本身是一个类似于.axd.aspx以及web.config文件中的许多其他处理程序的HttpHandler。 MVC处理程序不知道如何处理请求,例如在程序集中查找嵌入式资源 - 知道如何执行此操作。 MVC知道该怎么做,它所做的一切超出了这个问题和答案的范围。

Here是一篇很好的文章,更详细地解释了.axd

+0

这绝对肯定应该是我接受的答案,加上一个。 – Yahya