Routes.Ignoreroutes("{resource}.axd/{*pathinfo}")
在Routeconfig类中故意添加,以忽略scriptresource.axd或MVC.NET中的webresource.axd。但为什么我们不需要这样的声明在网络形式。我知道我们可以在
void Application_Start(object sender, EventArgs e)
但是我们不需要在Webforms中这样做。或者在网络表格中添加这样的声明是一个很好的做法。
发布于 2017-07-13 06:34:25
AXD文件不是真正的文件(在物理上下文中存在),它们只是在AssemblyResourceLoader
中注册的别名。默认情况下,ASP.NET在HTTP处理例程提供的内部上下文中使用ScriptResource.axd
& WebResource.axd
。
为了防止将AXD请求(即对不存在的文件的请求)传递给任何控制器,RouteCollection.IgnoreRoute
将忽略指向ASP.NET路由文章中暗示的那些AXD文件的任何请求:
如果希望路由处理所有请求,甚至指向文件的请求,则可以通过将
RouteCollection
对象的RouteCollection
属性设置为true来覆盖默认行为。当您将此值设置为true时,所有匹配定义模式的请求都将由路由处理。 还可以指定路由不应处理某些URL请求。通过定义路由并指定应该使用StopRoutingHandler
类来处理该模式,可以防止路由处理某些请求。当请求由StopRoutingHandler
对象处理时,StopRoutingHandler
对象会阻塞作为路由的请求的任何附加处理。相反,请求被处理为ASP.NET页面、Web服务或其他ASP.NET端点。
因此,如果有人请求,例如example.com/WebResource.axd?d=XXXXX&t=ZZZZZZ
,它可能会返回特定的代码片段,在特定的汇编文件中的任何嵌入式资源,这只使用webforms -而不是MVC。
如果您正在检查%Windir%\Microsoft.NET\Framework\[version number]\Config
中的%Windir%\Microsoft.NET\Framework\[version number]\Config
文件,则存在WebResource
&其他AXD路径,如下所示:
<httpHandlers>
<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" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
<add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
...
</httpHandlers>
请注意,webforms通常使用AXD别名作为特定程序集的嵌入式资源容器,这些程序集后来由ASPX页面呈现,因为服务器控件利用程序集文件来存储预定义的脚本,以便在页面生命周期中运行。然而,MVC本身是HTTP处理程序,它以类似于AXD别名的方式提供请求,而且由于MVC直接提取资源文件而不是使用嵌入式资源(在MVC中没有调用System.Web.UI.WebResource
或System.Web.UI.Page.ClientScript.GetWebResourceUrl(this.GetType, [resource path])
之类的东西),所以可以安全地忽略对AXD别名的请求。
其他参考资料:
WebResource.axd到底在哪里?
https://stackoverflow.com/questions/45072272
复制相似问题