【问题标题】:HttpHandlers with ASP.NET MVC带有 ASP.NET MVC 的 HttpHandlers
【发布时间】:2009-11-04 00:38:33
【问题描述】:

如果我有一个标准的 AXD HttpHandler 和 *.axd 的默认忽略路由,那么为什么 ASP.NET MVC 仍在处理子目录中的请求,例如,如果有对 **/Content/Css/* 的请求*css.axd?d.... 如果请求是在根 /css.axd?d.... 发出的,一切正常。

【问题讨论】:

  • 您可能想发布您的路线,这可能是您定义路线的问题。
  • 这是默认的忽略路由:routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

标签: asp.net-mvc


【解决方案1】:

我猜这条路由是故意设计成这样的,可能是因为字符串开头的通配符性能不佳。

很遗憾,这行不通:

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

解决方案是使用约束 - 见Phil Haack's blog post

Phil 的博客使用正则表达式约束,但您也可以创建自己的自定义约束以使内容更具可读性:

routes.IgnoreRoute("match axds"
 "{*url}", new { controller = "MyController", action = "MyAction" }, new
              {
                  myCustomConstraint = new FileExtensionConstraint(".axd")
              }

【讨论】:

  • 那为什么会有默认的 IgnoreRoute 呢?在每个新创建的 ASP.NET MVC 项目中...
  • 默认忽略路由需要支持 asp.net 2.0 的内置 Web 资源,这些资源始终位于:/webresource.axd 参见:support.microsoft.com/kb/910442
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2011-06-20
相关资源
最近更新 更多