ASP.NET MVC路由与IIS7中的物理路径冲突

3
我是一个有用的助手,可以翻译文本。
我正在处理控制器组织方面的问题,遇到了一个问题。
如果我有以下物理结构:
/Home/HomeController.cs
/Home/Index.aspx
/Home/About.aspx

我请求URI:

/Home/Index

我得到了一个403目录列表被拒绝的错误 :(
(我正在使用自定义IControllerFactory和IViewEngine来查找这个非默认路径)
为什么会出现这种情况?(我知道403是因为它命中了/Home文件夹,但为什么会命中该文件夹?)
为什么UrlRoutingModule不重写路由并让控制器接收请求? Application_BeginRequest触发,但然后似乎将控制权传回IIS,以尝试从文件系统中提供服务。
如果存在物理路径,UrlRoutingModule是否默认使用该路径进行重写?
有办法让这个工作吗?
注:请不要建议重新定位我的控制器等。我知道这是一个显而易见的选项,但这不是问题的关键 ;)
使用IIS7集成模式
2个回答

4

因为路由抽象只会路由那些在磁盘上没有对应文件的请求。

你唯一的选择就是重命名你的文件夹结构。

-- 编辑 实际上,你可以通过在RouteCollection上设置RouteExistingFiles属性来禁用这个“特性”。


CSS文件无法加载。 - LittleDragon

1

路由模块确实喜欢真实文件,如果它们存在的话。似乎在无法访问时,它也不会重新定向。

你理解分离控制器/视图对于MVC架构的核心分离关注点的重要性,是吧?我担心将控制器/视图保留在同一文件夹中可能会使以后的开发人员感到困惑。


你知道这个“preference”代码在哪里吗?我去了反射器野生动物园,但是被狮子吃掉了 :( - Andrew Bullock
System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase) - SerialSeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接