【发布时间】:2011-05-14 12:38:55
【问题描述】:
我们的商店正在将 ASP.NET MVC 集成到一个大型 Web 应用程序中,该应用程序利用 system.webServer\handlers 下 web.config 中定义的自定义和第 3 方 HTTP 处理程序。以这种方式利用 HTTP 处理程序对我们来说非常有用,因为我们不需要为每个产品实例重新编译应用程序或将实际的处理程序页面放在 Web 范围内的某个磁盘上。
真的有必要在我们的 global.asax 中添加显式的 Ignore Routes 以便运行时能够尊重我们在 web.config 中定义的处理程序吗?我原以为 Web.Routing 会在 在 system.webServer\handlers 中定义的处理程序被检查(而不是相反)之后被调用。
我们使用模块化设计,允许在添加功能时从 web.config 添加/删除处理程序。随着 MVC 路由的引入,我们似乎需要在 global.asax 文件中为 web.config 中定义的每个可能的处理程序添加忽略路由。
请注意,这些处理程序的实际文件不存在于磁盘上 - 它们是虚拟的并嵌入在程序集中。下面是一个第 3 方处理程序的示例,它现在需要在 global.asax 中显式忽略路由:
<system.webServer>
<handlers>
<!-- telerik radcontrols -->
<add name="TelerikDialogHandler" verb="*" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler, Telerik.Web.UI, Version=2009.1.402.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4"></add>
</handlers>
</system.webServer>
因此,如果您使用 System.Web.Routing,则必须为 Web.Config 中指定的 Http 处理程序包含忽略路由?还是我做错了什么?
【问题讨论】:
-
路由是作为 HttpModule 实现的,所以总是在选择 HttpHandler 之前进行处理。
-
您为什么不将其发布为拉迪斯拉夫的答案,以便您从中获得代表。
标签: asp.net-mvc asp.net-mvc-routing httphandler asp.net-routing