【问题标题】:asp.net mvc route clashing with physical path in IIS7asp.net mvc 路由与 IIS7 中的物理路径冲突
【发布时间】:2010-05-20 12:35:20
【问题描述】:

我在搞乱控制器组织并且遇到了问题。

如果我有以下物理结构

/Home/HomeController.cs
/Home/Index.aspx
/Home/About.aspx

我请求 URI:

/Home/Index

我得到一个403 Directory Listing Denied :(

(我使用自定义的 IControllerFactory 和 IViewEngine 来查看这个非默认路径)

为什么会这样? (我知道 403 是因为它点击了/Home 文件夹,但为什么它会点击文件夹?)

为什么 UrlRoutingModule 不重写路由,让控制器接请求?

Application_BeginRequest 触发,但随后它似乎将控制权传递回 IIS 以尝试从文件系统提供服务。

是不是UrlRoutingModule在重写之前就存在就默认物理路径了?

有没有办法让它工作?

注意请不要建议重新定位我的控制器等。我知道这是一个显而易见的选择,但这不是问题;)

在集成模式下使用 IIS7

谢谢

【问题讨论】:

    标签: asp.net-mvc iis web-config


    【解决方案1】:

    因为路由抽象只会路由磁盘上没有等效文件的请求。

    您别无选择,只能重命名文件夹结构。

    -- 编辑 不,实际上您可以通过在 RouteCollection 上设置 RouteExistingFiles 属性来禁用该“功能”。

    【讨论】:

      【解决方案2】:

      路由模块确实对真实文件(如果存在)有偏好。似乎它也不能在可访问性检查失败后重新路由。

      您确实明白,拥有单独的控制器/视图可以加强 MVC 架构的核心关注点分离,对吧?我担心将控制器/视图保存在同一个文件夹中可能会使后来的开发人员感到困惑。

      【讨论】:

      • 嗯,你知道这个“偏好”代码在哪里吗?我参加了一个反射器野生动物园,但一只狮子吃了我:(
      • System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase)
      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多