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

时间:2014-05-07 05:42:26

标签: asp.net-mvc asp.net-mvc-3 web-config

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

enter image description here

这两个web.config文件有什么区别,每个文件的目的是什么?

6 个答案:

答案 0 :(得分:52)

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

  

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

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

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

  • 阻止尝试直接访问razor和aspx视图的请求(这些视图需要通过适当的路由从控制器提供)。为此类直接请求配置了404响应,例如

<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
  • 为视图页面设置default import namespaces,否则必须通过using明确添加。您可以在此处为常用自定义程序集添加名称空间(例如,自定义html帮助程序扩展名),例如

  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    ...
  • 为MVC配置anti-xss RequestValidation过滤器。配置中添加的评论最能说明这一点:

<!--
    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.
 -->

答案 1 :(得分:20)

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

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

答案 2 :(得分:5)

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

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

编辑1: 在评论中提出更多解释。

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

答案 3 :(得分:5)

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

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

答案 4 :(得分:3)

ASP.NET配置存储在web.config个文件(XML文件)中。

这些文件可以出现在ASP.NET应用程序的许多目录中。它们甚至可以在部署之后帮助配置应用程序行为,具体取决于您可以使用记事本编辑它们。他们还将代码和配置数据分开。

每个web.config文件都适用于它所存在的目录和所有子子目录。子目录中的Web.config个文件可用于覆盖父项的web.config文件。

您可以选择使用location元素覆盖单个文件或目录。见LINK

设置继承规则与foillows一样。

首先是machine.config文件,该文件通常位于systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\

在同一目录中存在一个'master'web.config文件,该文件定义了在机器上运行的所有asp.net应用程序的设置。

然后出现您的应用程序中存在的web.config文件。

更多信息:

ASP.NET configuration overview

ASP.NET Configuration file hierarchy and inheritance

答案 5 :(得分:1)

除了以简单的方式分发项目设置外,您还可以在运行时将其设置为发布。一只手放在方向盘上。 参见:

Web.config Transformations

Transformation Syntax