什么是routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
在我的项目中找不到任何.axd文件,可以删除此路由规则吗?
发布于 2012-01-26 18:25:17
.axd文件在物理上并不存在。ASP.NET在内部使用带有.axd扩展名(ScriptResource.axd和WebResource.axd)的URL,这些URL由HttpHandler处理。
因此,您应该遵守这条规则,以防止ASP.NET MVC尝试处理请求,而不是让专用的HttpHandler来处理。
发布于 2017-07-09 08:34:55
一些背景
如果打开此文件:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config您将在该文件中找到以下内容:
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />这基本上是在告诉Asp.NET运行时:“嘿,asp.net兄弟,如果有对WebResource.axd的请求,那么使用AssemblyResourceLoader来处理该请求。”
请注意,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本身是一个HttpHandler,类似于.axd和.aspx以及web.config文件中的许多其他处理程序。MVC处理程序不知道如何处理请求,例如在程序集中查找嵌入的资源- AssemblyResourceLoader知道如何处理。MVC知道如何做,它所做的一切都超出了这个问题和答案的范围。
发布于 2013-05-14 19:22:43
包含模式为{ resource }.axd/{*pathInfo}的路由是为了防止对WebResource.axd或ScriptResource.axd等网络资源文件的请求被传递到控制器。
阅读链接:http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
您还可以指定路由不应处理某些
请求。通过定义路由并指定应使用StopRoutingHandler类来处理该模式,可以防止路由处理某些请求。当请求由StopRoutingHandler对象处理时,StopRoutingHandler对象会阻止将该请求作为路由进行的任何额外处理。相反,请求将作为网页、ASP.NET服务或其他ASP.NET端点进行处理。您可以使用RouteCollection.Ignore方法(或MVC应用程序的RouteCollectionExtensions.IgnoreRoute )来创建使用StopRoutingHandler类的路由。
https://stackoverflow.com/questions/9016650
复制相似问题