MVC 項目中爲何會有兩個web.config

  咱們對MVC 並不陌生, 在建立MVC項目時,總會發現,在工程目錄 中有兩個 web.config 文件,一個是在工程的根目錄下,一是在 views 下,兩個web.config 中的內容也不盡相同,那麼爲何會有兩個 web.config 文件,這就是這篇隨筆將要說明的。前端

  1. 根目錄下的 web.config 文件

   根目錄下的web.config 文件是對根目錄下的全部文件起做用,在打開根目錄下的 web.config 文件時,你會發現web.config 爲全部的路徑或動做註冊了  HttpNotFoundHandler,web

<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>

   或者在 IIS7中,它多是這麼定義的數據庫

<add name="BlockViewHandler" path="*.aspx" verb="*" 
    preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>

   另外,你還能夠添加自定義出錯頁面,或一些配置信息,如數據庫的鏈接,鍵-值對等,工程中的一些配置就是從根目錄下的 web.config 中讀取的。一些必要的程序集也是在根目錄下注冊的,當運行項目時,mvc 框架會根據根目錄下的 web.config 文件中註冊的程序集文件進行加載,包括程序集的版本號,密鑰等設計模式

 

  2.  Views 下的 web.config 文件mvc

    Views 下的 web.config 主要做用於視圖,阻止經過 Controller 之外的途徑來訪問 Views 文件夾下的視圖,在 MVC 的設計模式中,Controllers 支持路由請求,並返回一個特定的通過渲染的視圖給調用的客戶端。框架

     若是你想控制 views 下的視圖,那麼你就要在 Views 下的 web.config 文件中添加一些特別的設置,若是你在工程中引入的 area 的概念(添加area ),那麼在每個 area 中都會包含一個特別的 web.config 文件,這樣,就能夠對每個 area做一些特別的控制。spa

   Views 下的視圖,本質上就是一個前端類,它會在咱們的視圖引擎第一次找到它的時候將它編譯成一個前端頁面類,編譯完後,就須要將這個前端頁面類繼承一個webViewPage<TModel>的泛型類,或者WebViewPage類  (注:WebViewPage類是webViewPage<TModel>類的父類),該目錄下的web.config 指定了 視圖編譯完後生成的前端頁面類的父類設計

  打開 web.congig 文件,你會看到如下代碼;blog

    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>

  若是把 Views 下的 web.config 文件刪除後,就會報如下錯誤繼承

    這是由於在訪問一個視圖頁面,例如/Home/Index的時候,視圖引擎就會編譯這個Index視圖,當編譯的時候會發現,找到了視圖,它不知編譯完的這個前端頁面類的父類究竟是誰。

   由此可知:View文件夾下面的web.config文件的做用是告訴視圖引擎如何編譯視圖的前臺頁面類,以及制定當前頁面類的父類爲WebViewPag,通常狀況下,這個web.config裏面的配置不須要咱們手動的更改任何東西,也不能刪除

相關文章
相關標籤/搜索