什么是routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
什么是routes.IgnoreRoute( “{}资源个.axd/{*} PATHINFO”)
我无法找到我的项目中的任何文件个.axd,我可以删除这条路线的规则?
什么是routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
什么是routes.IgnoreRoute( “{}资源个.axd/{*} PATHINFO”)
我无法找到我的项目中的任何文件个.axd,我可以删除这条路线的规则?
.axd文件在物理上不存在。 ASP.NET在内部使用带有.axd扩展名的URL(ScriptResource.axd和WebResource.axd),并且它们由HttpHandler处理。
因此,您应该遵守此规则,以防止ASP.NET MVC尝试处理请求,而不是让专用的HttpHandler执行此操作。
与模式{}资源的途径个.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类的路由。
一些背景
如果你打开这个文件:
<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...&t=6342..." type="text/javascript"></script>
的会发现其中的JavaScript使用的查询字符串信息嵌入和返回的JavaScript装配。
回到问题
因此,要回答这个问题,什么是:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
这是告诉我们不会是路由引擎处理那些符合该路由模式的请求。换句话说,我们不会处理.axd
请求。为什么?因为MVC本身是一个类似于.axd
和.aspx
以及web.config文件中的许多其他处理程序的HttpHandler。 MVC处理程序不知道如何处理请求,例如在程序集中查找嵌入式资源 - 知道如何执行此操作。 MVC知道该怎么做,它所做的一切超出了这个问题和答案的范围。
Here是一篇很好的文章,更详细地解释了.axd
。
这绝对肯定应该是我接受的答案,加上一个。 – Yahya
我敢肯定你会希望人们能够下载你的网站上的“axd文件”,因为它们包含JavaScript和样式。 – Moulde
这个答案不正确。将“IgnoreRoute”放入MVC的路由配置中的原因是为了确保MVC不会尝试处理请求。这是因为'.axd'端点需要由另一个HTTP处理程序(一个处理程序,它不是* MVC的一部分)来处理,以便为脚本提供服务。 – NightOwl888