我试图确定是否有可能(或实际)在ASP.NET MVC 5中实现Bob叔叔的尖叫体系,而不是使用默认文件夹结构。
以下是对“尖叫的体系结构”的描述的链接:http : //blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html
假设的文件夹结构如下所示:
根
相应的URL路由如下所示:
我创建了一个自定义的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方法。
我可以将“客户和雇员”文件夹移动到子文件夹中(即,将它们移出根目录),并且一切正常,但是我想尝试将这些文件夹保持在顶层(根据《尖叫建筑指南》)。
有人对此问题有解决方案吗?
请注意,MVC Areas不是我正在寻找的解决方案,因为它不允许上述文件夹结构(即,以高级用例和视图命名的顶级文件夹,这些视图直接包含在Views文件夹中而不是在Views文件夹中)子文件夹)。
我打赌您对IIS的看法是正确的。如果您有两个路径映射到同一资源,则首先在IIS端检查物理路径。
我在研究路由配置时发现了RouteExistingFiles属性,RouteCollection
并认为这可以工作。
我将该值设置为,true
并在项目中使用一个空文件夹在本地进行了测试,一条路由重定向到Home/Index
,然后导航到localhost:xxx/MyFolder
。它工作正常。
因此,您所需要做的就是将此属性设置为true,以使其首先选择Asp.net路由而不是物理路由。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句