Asp.net-Mvc

為什麼 .NET 在 MVC asp.net 應用程序中生成兩個 web.config 文件?

  • May 7, 2014

我是 MVC 3 的新手。使用兩個 web.config 文件的原因是什麼?

在此處輸入圖像描述

這 2 個 web.config 文件有什麼區別,每個文件的用途和功能是什麼?

我想補充一點,/Views 文件夾中的 Web.Config 是一種很好的(如果不是的話)專門為您的視圖聲明命名空間的方法。在 Web 應用程序中,幾乎每個視圖都有可能獲得一個 ViewModel (而不是您的實際模型)傳遞給它。在 @model 之後聲明完整的命名空間或具​​有相同的 @using App.Web.Viewmodels 變得乏味。這樣,所有的視圖模型都是自動可用的,你必須做額外的工作才能讓真實的模型在範圍內,然後應該立即設置一些警報。

此外,通常應用程序可以獲得許多專門用於視圖的擴展方法(HTML 助手會跳到腦海中)。在 /Views/Web.Config 中為這個擴展類定義命名空間是有意義的。這樣您就永遠不會懷疑“為什麼 IntelliSense 找不到我的 @Html.ImageLink() 方法??!”

這是一個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"/>
  • 為視圖頁面設置預設導入命名空間,否則必須通過using. 您可以在此處為您的常用自定義程序集添加命名空間(例如自定義 html 幫助程序擴展),例如
 <namespaces>
   <add namespace="System.Web.Mvc" />
   <add namespace="System.Web.Mvc.Ajax" />
   <add namespace="System.Web.Mvc.Html" />
   ...
  • 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.
-->

引用自:https://stackoverflow.com/questions/23509617