首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

什么是routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
EN

Stack Overflow用户
提问于 2012-01-26 18:20:34
回答 5查看 66.1K关注 0票数 98

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

在我的项目中找不到任何.axd文件,可以删除此路由规则吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-26 18:25:17

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

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

票数 85
EN

Stack Overflow用户

发布于 2017-07-09 08:34:55

一些背景

如果打开此文件:

代码语言:javascript
复制
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config

您将在该文件中找到以下内容:

代码语言:javascript
复制
<add path="WebResource.axd"
     verb="GET"
     type="System.Web.Handlers.AssemblyResourceLoader"
     validate="True" />

这基本上是在告诉Asp.NET运行时:“嘿,asp.net兄弟,如果有对WebResource.axd的请求,那么使用AssemblyResourceLoader来处理该请求。”

请注意,WebResource.axd 不是一个文件,而只是到AssemblyResourceLoader的映射(如果我可以这么说的话)。它是处理程序注册时所用的名称。在我的机器上,我发现了以下.axd处理程序:

代码语言:javascript
复制
<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中看到以下内容:

代码语言:javascript
复制
<script src="/YourSite/WebResource.axd?d=fs7zUa...&amp;t=6342..." type="text/javascript"></script>

AssemblyResourceLoader将使用查询字符串中的信息找到嵌入javascript的程序集,并返回javascript。

回到问题

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

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

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

票数 40
EN

Stack Overflow用户

发布于 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类的路由。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9016650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档