asp.net mvc路由与IIS7中的物理路径冲突

时间:2010-05-20 12:35:21

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

我正在搞乱控制器组织,我遇到了问题。

如果我有以下物理结构

/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在重写之前存在,则默认为物理路径吗?

有没有办法让这项工作?

N.B。请不要建议重新安置我的控制器等。我知道这是一个显而易见的选择,但这不是问题;)

在集成模式下使用IIS7

由于

2 个答案:

答案 0 :(得分:4)

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

您没有其他选择,只能重命名文件夹结构。

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

答案 1 :(得分:1)

路由模块确实优先考虑真实文件(如果存在)。似乎在访问失败检查失败后也必须重新路由。

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