1、Web.Config繼承特性html
首先咱們就來看看配置文件的繼承層次。都知道在ASP.NET中有不少的配置文件,如machine.config,web.config,特別是web.config出如今不少的地方,出如今不一樣的地方做用也不同。並且咱們還知道machine.config中的配置對服務器上全部ASP.NET網站起做用,而web.config中的配置就依據它所在的位置而定,如在一個網站根目錄中的web.config就對整個網站起做用,在一個網站中的某個文件夾中的web.config就只對該文件夾起做用,並且網站跟目錄中的web.config中的配置也對這個文件夾起做用。這就反映出了另一個事實:配置文件是有繼承層次的. 換個角度,對於一個網站中的某個文件夾,它不只僅只是受本文件夾中web.config的配置約束,並且還收到本網站中根目錄下的web.config的約束,並且還受到本臺服務器上的machine.config的約束。<br />web
下面咱們就來具體的看看ASP.NET中的配置文件的繼承層次:
1.machine.confiig-在ASP.NET中,不少的默認的配置都是定義在這個配置文件中的,可是有一些配置已經從machine.config中移出到別的地方了,爲了縮短ASP.NET的加載時間。咱們知道在運行一個ASP.NET程序的時候,ASP.NET運行時是要加載不少的配置文件的,固然machine.config是必定要加載的,可是其中有些配置不是必須的,因此就移到別的地方,若是用到就加載。json
2.在安裝根目錄中的web.config-在%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG中的配置文件,以前說過machine.config把不少的配置移出了,就放在這個配置中。
3.在根目錄中的web.config-咱們也能夠把web.config放在根目錄中,讓它對整個根目錄起做用。如:c:\inetpub\wwwroot.由於咱們能夠新建不少的虛擬目錄文件夾,文件夾中有網站程序,若是把配置文件放在虛擬目錄中,那麼配置就對整個文件夾中的網站起做用。瀏覽器
4.一個網站中的web.config-這是咱們最多見的配置地方。
5.網站中的某個文件夾中的web.config-咱們經常經過這個配置文件來限制對文件的訪問權限。服務器
繼承機構圖
cookie
2、Web.Config結構說明session
當建立一個ASP.NET項目時,默認狀況下會在根目錄自動建立一個默認的 Web.config文件,包括默認的配置設置,全部的子目錄都繼承它的配置設置。若是你想修改子目錄的配置設置,你能夠在該子目錄下新建一個Web.config文件。它能夠提供除從父目錄繼承的配置信息之外的配置信息,也能夠重寫或修改父目錄中定義的設置。Web.config文件是按照XML的格式定義的,因此必須嚴格遵照XML格式。app
全部配置信息都駐留在 <configuration> 和 </configuration> 根 XML 標記之間。標記間的配置信息分爲兩個主區域:配置節處理程序聲明區域和配置節設置區域。less
配置節處理程序聲明出如今配置文件頂部 <configSections> 和 </configSections> 標記之間,配置節聲明使用<section>節,如:ide
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data" />
配置節也支持嵌套,外層的配置節使用<sectionGroup>,內層的使用<section>,如:
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>
配置節設置區域位於 <configSections> 區域以後,它包含實際的配置設置,如:
<dataConfiguration defaultDatabase="DefaultConnection" />
全部的配置節都必須遵照先聲明後使用的原則,否則編譯程序時會報錯。
有人可能會疑問,爲何Web.config中默認生成的配置節沒看到聲明就直接用呢?好比<connectionStrings>和<appSettings>。這是由於這些節的聲明是在Windows\Microsoft .NET\Framework\versionNumber\CONFIG\Machine.config中完成的,Machine.config 文件用於服務器級的配置設置,Web.config文件繼承 Machine.config 文件中的全部設置。
3、WebConfig幾點配置說明
如下全部的代碼都應該位於
<configuration>
<system.web>
和
</system.web>
</configuration>
之間,出於學習的目的下面的示例都省略了這段XML標記
一、<authentication> 節
做用:配置 ASP.NET 身份驗證支持(爲Windows、Forms、PassPort、None四種)。該元素只能在計算機、站點或應用程序級別聲明。<authentication> 元素必需與<authorization> 節配合使用。
示例:
如下示例爲基於窗體(Forms)的身份驗證配置站點,當沒有登錄的用戶訪問須要身份驗證的網頁,網頁自動跳轉到登錄網頁。
其中元素loginUrl表示登錄網頁的名稱,name表示Cookie名稱
二、<authorization> 節
做用:控制對 URL 資源的客戶端訪問(如容許匿名用戶訪問)。此元素能夠在任何級別(計算機、站點、應用程序、子目錄或頁)上聲明。必需與<authentication> 節配合使用。
示例:如下示例禁止匿名用戶的訪問
注:你可使用user.identity.name來獲取已通過驗證的當前的用戶名;可使用web.Security.FormsAuthentication.RedirectFromLoginPage方法將已驗證的用戶重定向到用戶剛纔請求的頁面.
三、<compilation>節
做用:配置 ASP.NET 使用的全部編譯設置。默認的debug屬性爲「True」.在程序編譯完成交付使用以後應將其設爲 True(Web.config文件中有詳細說明,此處省略示例)
四、<customErrors>
做用:爲 ASP.NET 應用程序提供有關自定義錯誤信息的信息。它不適用於 XML Web services 中發生的錯誤。
示例:當發生錯誤時,將網頁跳轉到自定義的錯誤頁面。
其中元素defaultRedirect表示自定義的錯誤網頁的名稱。mode元素表示:對不在本地 Web 服務器上運行的用戶顯示自定義(友好的)信息。
五、<httpRuntime>節
做用:配置 ASP.NET HTTP 運行庫設置。該節能夠在計算機、站點、應用程序和子目錄級別聲明。
示例:控制用戶上傳文件最大爲4M,最長時間爲60秒,最多請求數爲100
六、 <pages>
做用:標識特定於頁的配置設置(如是否啓用會話狀態、視圖狀態,是否檢測用戶的輸入等)。<pages>能夠在計算機、站點、應用程序和子目錄級別聲明。
示例:不檢測用戶在瀏覽器輸入的內容中是否存在潛在的危險數據(注:該項默認是檢測,若是你使用了不檢測,一要對用戶的輸入進行編碼或驗證),在從客戶端回發頁時將檢查加密的視圖狀態,以驗證視圖狀態是否已在客戶端被篡改。(注:該項默認是不驗證)
七、<sessionState>
做用:爲當前應用程序配置會話狀態設置(如設置是否啓用會話狀態,會話狀態保存位置)。
示例:
注:
mode="InProc"表示:在本地儲存會話狀態(你也能夠選擇儲存在遠程服務器或SAL服務器中或不啓用會話狀態)
cookieless="true"表示:若是用戶瀏覽器不支持Cookie時啓用會話狀態(默認爲False)
timeout="20"表示:會話能夠處於空閒狀態的分鐘數
八、<trace>
做用:配置 ASP.NET 跟蹤服務,主要用來程序測試判斷哪裏出錯。
示例:如下爲Web.config中的默認配置:
注:
enabled="false"表示不啓用跟蹤;requestLimit="10"表示指定在服務器上存儲的跟蹤請求的數目
pageOutput="false"表示只能經過跟蹤實用工具訪問跟蹤輸出;
traceMode="SortByTime"表示以處理跟蹤的順序來顯示跟蹤信息
localOnly="true" 表示跟蹤查看器 (trace.axd) 只用於宿主 Web 服務器
參考:WebConfig