【发布时间】:2016-06-11 07:47:19
【问题描述】:
我的 ASP.NET MVC Web 应用程序有 5 个区域。每个区域都有自己的Views 文件夹,其中有自己的Web.config。这使得 6 个配置文件与应用程序根目录中的主 Web.config 一起构成。管理起来有点困难。
据我所知,这些配置做了两件事(至少在默认情况下):
1.) 设置 Razor 主机工厂以默认包含选定的命名空间。
2.) 通过使用HttpNotFoundHandler 处理请求来阻止对Views 文件夹中文件的直接访问。
所有这些Web.config 文件中的代码对我来说几乎相同,在我看来这不是管理这些配置的好方法。如果我添加更多区域或更细化地组织我的代码,我最终可能会得到超过 5 个Web.config 文件。为什么我需要这么多?一个还不够吗?
我的观点如下:
ad 1.) 不能将所有这些命名空间都导入到应用程序根 Web.config 文件中,或者导入到 _ViewStart.cshtml 文件中吗?
ad 2.) 阻止对所有文件夹中所有代码文件的访问然后使用相反的方法不是更有意义 - 即更改其中包含静态文件的文件夹(如Assets 文件夹)使用StaticFileHandler?原则上,将StaticFileHandler 允许读取的文件列入白名单,而不是指定HttpNotFoundHandler 应处理哪些文件,这似乎是一种更安全的方法。
这可行吗?我错过了什么吗?有没有其他人遇到过类似的问题:ViewsWeb.config 文件过多?
感谢您的回答。
【问题讨论】:
-
我不想问这个问题并说明显而易见的问题,但是......你有一个真正令人信服的理由继续使用区域吗?我觉得只要经过深思熟虑并正确配置路由,您就可以消除必要性和繁荣——回到 1 web.config :)
-
@FernandoRodriguez:我使用区域的主要原因是组织文件以便开发人员更容易导航。我更容易拥有一个包含 20 个控制器的
Controllers文件夹,而不是包含 100 个控制器的Controllers文件夹。Views文件夹也是如此,里面的文件夹太多了。但是你是对的,离开区域的想法可能是一种需要考虑的解决方案。它目前帮助我使源代码更有条理,我对它的工作方式非常满意。 -
是的,如果您的项目足够大,这是有道理的。有些人可能会争辩说,如果您要解决这个问题,您可以/应该让它与您的解决方案分开项目。这既不是这里也不是那里..另外......除了使用区域之外,您可以简单地在控制器下创建命名文件夹(按组或功能或 w/e)——我已经在 30 多个应用程序中完成了此操作,其中我有 Api & 应用程序功能。所以,例如
~/Controllers/Api/CreateJobController.cs和~/Controllers/App/JobController.cs。仍然让所有组织都没有头疼! -
@FernandoRodriguez:将其拆分为多个项目的问题在于,我仍然必须分别配置每个项目中的视图。此外,ASP.NET MVC 并没有为使用其他项目的视图做好充分准备,出于各种原因,我宁愿避免使用像 RazorGenerator 这样的解决方案。没错,在
Controllers这样的文件夹中创建更深层次的文件夹结构可能是解决此问题的一种方法。但是,我仍然对这些区域的工作方式感到非常满意,这对我来说很有意义,实际上我也更喜欢更长的路线,就我而言。感谢您的见解! -
仅供参考@Tom:请记住,所有 MVC 路由也是可覆盖/可编辑的,因此您不会 100% 完全锁定 ASP.NET 默认创建路由的方式。你有你的 RouteConfig.cs,然后你也可以明确地将 [Route(/Home/blah/)] 或 [RoutePrefix(/../)] 属性放在任何给定的方法/控制器上
标签: c# asp.net asp.net-mvc razor web-config