首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Routes.Ignoreroutes("{resource}.axd/{*pathinfo}")在webforms中不是故意必需的?

为什么Routes.Ignoreroutes("{resource}.axd/{*pathinfo}")在webforms中不是故意必需的?
EN

Stack Overflow用户
提问于 2017-07-13 05:43:32
回答 1查看 1.1K关注 0票数 1
代码语言:javascript
运行
复制
    Routes.Ignoreroutes("{resource}.axd/{*pathinfo}")

在Routeconfig类中故意添加,以忽略scriptresource.axd或MVC.NET中的webresource.axd。但为什么我们不需要这样的声明在网络形式。我知道我们可以在

代码语言:javascript
运行
复制
     void Application_Start(object sender, EventArgs e) 

但是我们不需要在Webforms中这样做。或者在网络表格中添加这样的声明是一个很好的做法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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路径,如下所示:

代码语言:javascript
运行
复制
<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.WebResourceSystem.Web.UI.Page.ClientScript.GetWebResourceUrl(this.GetType, [resource path])之类的东西),所以可以安全地忽略对AXD别名的请求。

其他参考资料:

WebResource.axd到底在哪里?

WebResource.axd是什么?

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

https://stackoverflow.com/questions/45072272

复制
相关文章

相似问题

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