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

时间:2015-04-14 20:02:14

标签: asp.net asp.net-mvc iis architecture asp.net-mvc-5

我试图确定在ASP.NET MVC 5中实现Uncle Bob的尖叫架构是否可能(或实际),而不是使用默认的文件夹结构。

这是指向尖叫架构描述的链接:http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html

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

  • 客户
    • 控制器
      • 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")和部分视图位置格式(例如& #34;〜/共享/查看/ {0} .cshtml&#34)。我还将共享_ViewStart.cshtml移动到根目录,并将Views / Shared文件夹的web.config与根级web.config合并,以避免在所有View中复制这两个文件文件夹。

一切都很好,但是,如果我尝试导航到索引页面(例如http://www.example.com/employees/),我会收到403.14错误(禁止)。所有其他路线(包括http://www.example.com/employees/index)都可以正常工作。

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

我可以将Customers和Employees文件夹移动到子文件夹中(即将它们移出根目录)并且一切正常,但我想尝试将这些文件夹保持在顶层(根据尖叫架构)准则)。

有没有人能解决这个问题?

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

1 个答案:

答案 0 :(得分:6)

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

我正在挖掘路线配置,并在RouteCollection找到了属性RouteExistingFiles并认为这可行。

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

那么你需要做的就是将this属性设置为true,以便首先选择Asp.net路由而不是物理路由。