ASP.NET MVC 5中的自定义文件夹结构

ASP.NET MVC 5中的自定义文件夹结构,asp.net,asp.net-mvc,iis,architecture,asp.net-mvc-5,Asp.net,Asp.net Mvc,Iis,Architecture,Asp.net Mvc 5,我试图确定在ASP.NETMVC5中实现Bob叔叔的尖叫式体系结构而不是使用默认的文件夹结构是否可行(或切实可行) 这里有一个链接,指向尖叫架构的描述: 假设的文件夹结构如下所示: 根 顾客 控制器 CustomerController.cs 模型 Customer.cs 观点 Index.cshtml Details.cshtml Update.cshtml 雇员 控制器 EmployeesController.cs 模型 Employee.cs 观点 Index

我试图确定在ASP.NETMVC5中实现Bob叔叔的尖叫式体系结构而不是使用默认的文件夹结构是否可行(或切实可行)

这里有一个链接,指向尖叫架构的描述:

假设的文件夹结构如下所示:

  • 顾客
    • 控制器
      • CustomerController.cs
    • 模型
      • Customer.cs
    • 观点
      • Index.cshtml
      • Details.cshtml
      • Update.cshtml
  • 雇员
    • 控制器
      • EmployeesController.cs
    • 模型
      • Employee.cs
    • 观点
      • Index.cshtml
      • Details.cshtml
      • Update.cshtml
  • 共享
    • 观点
      • _Layout.cshtml
      • Error.cshtml
  • _ViewStart.cshtml
  • Web.config
相应的URL路由如下所示:

  • =>客户索引
  • =>客户详细信息
  • =>客户更新
  • =>员工索引
  • =>员工详细信息
  • =>员工更新
我创建了一个自定义RazorViewEngine,并添加了适当的视图位置格式(例如“~/{1}/Views/{0}.cshtml”)和部分视图位置格式(例如“~/Shared/Views/{0}.cshtml”)。我还将共享的_ViewStart.cshtml移到了根目录,并将Views/shared文件夹的web.config与根目录级别的web.config合并,以避免在所有视图文件夹中重复这两个文件

一切都很好,但是,如果我尝试导航到一个索引页(例如),我会得到一个403.14错误(禁止)。所有其他路线(包括)都很好

我的猜测是,IIS显式阻止了到控制器索引方法的路由,因为URL与文件系统中的文件夹一致,并且默认情况下禁用了目录浏览。但是,如果启用目录浏览,它实际上会将我带到实际的目录列表,而不是路由到控制器的索引方法

我可以将Customers和Employees文件夹移动到一个子文件夹中(即,将它们移出根文件夹),一切正常,但我希望尝试将这些文件夹保持在顶层(根据体系结构指南)

有人能解决这个问题吗


请注意,MVC区域不是我正在寻找的解决方案,因为它不允许上述文件夹结构(即,以高级用例和视图命名的顶级文件夹,直接包含在视图文件夹中,而不是子文件夹中)。

我敢打赌你对IIS的看法是正确的。如果有两个路径映射到同一资源,则首先在IIS端检查物理路径

我在搜索routes配置,在
RouteCollection
上找到了属性,我认为这是可行的

我将该值设置为
true
,并使用项目中的空文件夹进行本地测试,路由重定向到
Home/Index
,并导航到
localhost:xxx/MyFolder
。它工作正常


因此,您需要做的就是将此属性设置为true,以便它首先选择Asp.net路由而不是物理路由。

是否为
http://www.example.com/employees/
?是的,我使用默认路由(即“{controller}/{action}/{id}”),默认操作映射到“Index”,id作为可选参数,应该映射到控制器。经过一些测试后,提出了一个可能的解决方案。如果有效,请告诉我。:)为了帮助其他人克服这个障碍,我写了一篇关于如何在ASP.NETMVC5中实现Bob叔叔的尖叫式体系结构的分步文章。这似乎奏效了。到目前为止,我认为您的解决方案没有任何问题。我将进一步研究一下我的测试项目,看看你提出的解决方案是否有任何潜在的负面影响,如果我在一天结束之前没有看到任何负面影响,我会将其标记为可接受的答案。感谢您的帮助和及时回复!你的解决方案一点问题都没有。事实上,它工作得很好,没有明显的副作用。我已将你的解决方案标记为已接受的答案。再次感谢!很高兴听到。唯一的“缺点”应该是,当物理文件与映射路由位于同一路由上时,您希望提供物理文件而不是操作。但是,我想不出在什么情况下你会希望这样。