为什么.NET在MVC asp.net应用程序中生成两个web.config文件?

Dat*_*tta 36 asp.net-mvc web-config asp.net-mvc-3

我是MVC 3的新手.使用两个web.config文件的原因是什么?

在此输入图像描述

这2个web.config文件之间的区别是什么,以及每个文件的功能是什么?

Stu*_*tLC 53

这是web.config文件继承的一个示例.来自MSDN

您可以在整个应用程序目录中分发ASP.NET配置文件,以在继承层次结构中配置ASP.NET应用程序.此结构允许您在相应的目录级别实现应用程序所需的配置详细信息级别,而不会影响更高目录级别的配置设置.

具体来说,对于MVC项目,子目录web.config中的View子目录用于定制.cshtml/ .aspxfiles.您可以使用web.config子文件夹中的文件来扩展,覆盖和删除从应用程序自己的根继承的设置,并进一步提升层次结构,例如machine.config

/Views/web.config包含的常见配置包括:

  • 阻止尝试直接访问razor和aspx视图的请求(这些视图需要通过适当的路由从控制器提供).甲404响应被配置用于这种直接请求,例如

<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
Run Code Online (Sandbox Code Playgroud)
  • 为视图页面设置默认导入名称空间,否则必须通过这些名称空间显式添加using.您可以在此处为常用自定义程序集添加名称空间(例如,自定义html帮助程序扩展名)

  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    ...
Run Code Online (Sandbox Code Playgroud)
  • RequestValidation为MVC 配置anti-xss 过滤器.配置中添加的注释解释了这一点:

<!--
    Enabling request validation in view pages would cause validation to occur
    after the input has already been processed by the controller. By default
    MVC performs request validation before a controller processes the input.
    To change this behavior apply the ValidateInputAttribute to a
    controller or action.
 -->
Run Code Online (Sandbox Code Playgroud)

  • @AgentFire你[有选择地](http://www.dondraper.com/2010/02/how-to-stop-inheritance-of-webconfig-files/)使用`<clear>`或`<remove>`标记以擦除从父配置继承的所有或特定设置 (2认同)

Cér*_*ink 20

我想补充一点,/ Views文件夹中的Web.Config是一种很好的(如果不是那种)方式来专门为您的视图声明名称空间.在Web应用程序中,几乎每个视图都可以获得ViewModel (而不是你的实际模型)传递给它.在@model之后声明完整的命名空间或具有相同的@using App.Web.Viewmodels变得乏味.通过这种方式,所有视图模型都可以自动使用,您必须做额外的工作才能获得范围内的真实模型,然后立即设置一些警报.

此外,通常应用程序可以获得许多专门用于视图的扩展方法(HTML-helper跳转到脑海中).在/Views/Web.Config中为此扩展类定义名称空间是有意义的.这样你就不会怀疑"为什么IntelliSense无法找到我的@ Html.ImageLink()方法?"

  • 我不明白为什么将此答案标记为对所提问题的答案。我搜索问题并阅读标记的答案,但不知道与答案相关,但是当我看到其他答案时,我意识到此答案是原始答案的补充。请标记正确答案。这很令人困惑。 (2认同)

Sun*_*Sid 5

View有自己的配置.如果您正在处理区域那么您将了解多个配置.

实际上,重点是视图的Web.Config用于视图特定配置,例如阻止对视图的直接访问.

编辑1:评论中提到的更多解释.

web.config文件存在于Views文件夹中,以防止通过控制器以外的任何方式访问您的视图.在MVC设计模式中,控制器应该路由请求并将呈现的视图返回给调用客户端.这意味着不应该直接访问localhost9999://Home/Index.cshtml.


Sun*_*Sid 5

web.config文件存在于Views文件夹中,以防止通过控制器以外的任何方式访问您的视图.在MVC设计模式中,控制器应该路由请求并将呈现的视图返回给调用客户端.

表示localhost9999://Home/Index.cshtml不应该直接访问.