这是一个链接到尖叫建筑: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路由将如下所示:
> 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与文件系统中的文件夹重合,默认情况下禁用目录浏览.但是,如果我启用目录浏览,它实际上需要我到实际的目录列表,而不是路由到控制器的索引方法.
我可以将“客户”和“员工”文件夹移动到子文件夹中(即将其移出根目录),并且一切正常,但我想尝试将这些文件夹保留在顶层(根据尖叫架构指南).
请注意,MVC区域不是我正在寻找的解决方案,因为它不允许上述文件夹结构(即顶级文件夹以高级用例命名,并且直接包含在Views文件夹中,而不是在子文件夹).
解决方法
我正在挖掘路线配置,并在RouteCollection上找到属性RouteExistingFiles,并认为这可以工作.
我将值设置为true,并在本地测试项目中的空文件夹,重定向到Home / Index的路由,并导航到localhost:xxx / MyFolder.它工作正常
那么所有你需要做的就是将此属性设置为true,以便首先选择Asp.net路由而不是物理路由.