我正在搞乱控制器组织,我遇到了问题。
如果我有以下物理结构
/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
由于
答案 0 :(得分:4)
因为路由抽象只会路由磁盘上没有等效文件的请求。
您没有其他选择,只能重命名文件夹结构。
- 编辑 不,实际上您可以通过在RouteCollection上设置RouteExistingFiles属性来禁用该“功能”。
答案 1 :(得分:1)
路由模块确实优先考虑真实文件(如果存在)。似乎在访问失败检查失败后也必须重新路由。
你的确指出,拥有独立的控制器/视图可以加强MVC架构中心的关注点分离,对吧?我担心将控制器/视图保存在同一个文件夹中可能会让以后的开发人员感到困惑。