ASP.NET MVC 5 中的自定義文件夾結構
我正在嘗試確定是否可以(或實際)在 ASP.NET MVC 5 中實現鮑勃叔叔的尖叫架構,而不是使用預設文件夾結構。
這是 Screaming Architecture 描述的連結:http: //blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html
假設的文件夾結構如下所示:
根
顧客
控制器
- 客戶控制器.cs
楷模
- 客戶.cs
意見
- 索引.cshtml
- 詳細資訊.cshtml
- 更新.cshtml
僱員
控制器
- 僱員控制器.cs
楷模
- 員工.cs
意見
- 索引.cshtml
- 詳細資訊.cshtml
- 更新.cshtml
共享
意見
- _Layout.cshtml
- 錯誤.cshtml
_ViewStart.cshtml
網頁配置
相應的 URL 路由如下所示:
- http://www.example.com/customers/ => 客戶索引
- http://www.example.com/customers/details/1 => 客戶詳情
- http://www.example.com/customers/update/1 => 客戶更新
- http://www.example.com/employees/ => 員工索引
- http://www.example.com/employees/details/1 => 員工詳細資訊
- http://www.example.com/employees/update/1 => 員工更新
我創建了一個自定義 RazorViewEngine 並添加了適當的視圖位置格式(例如“~/{1}/Views/{0}.cshtml”)和部分視圖位置格式(例如“~/Shared/Views/{0}. cshtml”)。我還將共享的 _ViewStart.cshtml 移動到根目錄,並將 Views/Shared 文件夾的 web.config 與根級別的 web.config 合併,以避免在所有 View 文件夾中複製這兩個文件。
一切都很好,但是,如果我嘗試導航到索引頁面(例如http://www.example.com/employees/),我會收到 403.14 錯誤(禁止)。所有其他路線(包括http://www.example.com/employees/index)都可以正常工作。
我的猜測是 IIS 明確阻止了到控制器索引方法的路由,因為 URL 與文件系統中的文件夾一致,並且預設情況下禁用目錄瀏覽。但是,如果我啟用目錄瀏覽,它實際上會將我帶到實際的目錄列表,而不是路由到控制器的 index 方法。
我可以將Customers 和Employees 文件夾移動到一個子文件夾中(即將它們移出根目錄)並且一切正常,但我想嘗試將這些文件夾保持在頂層(根據Screaming Architecture 指南)。
有沒有人有這個問題的解決方案?
請注意,MVC 區域不是我正在尋找的解決方案,因為它不允許上述文件夾結構(即以高級案例命名的頂級文件夾和直接包含在 Views 文件夾中而不是在子文件夾)。
我打賭你對 IIS 的看法是正確的。如果有兩個路徑映射到同一資源,則首先在 IIS 端檢查物理路徑。
我正在探勘路由配置並找到屬性RouteExistingFiles並
RouteCollection認為這可以工作。我將值設置為
true並在項目中使用一個空文件夾進行本地測試,路由重定向到Home/Index,並導航到localhost:xxx/MyFolder. 它工作正常。因此,您需要做的就是將此屬性設置為 true 以便它首先選擇 Asp.net 路由而不是物理路由。