Web.config文件配置詳解

一、認識Web.config文件

Web.config文件是一個XML文本文件,它用來儲存 ASP.NET Web 應用程序的配置信息(如最常用的設置ASP.NET Web 應用程序的身份驗證方式),它可以出現在應用程序的每一個目錄中。當你通過VBNET新建一個Web應用程序後,默認情況下會在根目錄自動創建一個默認的 Web.config文件,包括默認的配置設置,所有的子目錄都繼承它的配置設置。如果你想修改子目錄的配置設置,你可以在該子目錄下新建一個Web.config文件。它可以提供除從父目錄繼承的配置信息以外的配置信息,也可以重寫或修改父目錄中定義的設置。

在運行時對Web.config文件的修改不需要重啓服務就可以生效(注:<processModel> 節例外)當然Web.config文件是可以擴展的。你可以自定義新配置參數並編寫配置節處理程序以對它們進行處理。

二、Web.config配置文件

Web.Config是以xml文件規範存儲, 所有的代碼都應該位於<configuration>節點之間,配置文件主要分爲以下格式:

1、配置節處理程序聲明

特點:位於配置文件的頂部,包含在<configSections>標誌中。

2、配置節組

特點: <sectionGroup>標記,可以自定義分組,可以放到<configSections>內部或其它<sectionGroup>標記的內部。

3、特定應用程序配置

特點: 位於<appSetting>中。可以定義應用程序的全局常量設置等信息。

4、配置節設置

特點: 位於<system.web>節中,控制asp.net運行時的行爲。

三、配置節的每一節

1<configuration>節根元素,其它節都是在它的內部。

2<appSetting>節此節用於定義應用程序設置項。對一些不確定設置,還可以讓用戶根據自己實際情況自己設置。

3<compilation>

格式:<compilation defaultLanguage="c#" debug="true"/>

Idefault language定義後臺代碼語言,可以選擇c#vb.net兩種語言。

IIdebugtrue時,啓動aspx調試;爲false不啓動aspx調試,因而可以提高應用程序運行時的性能。一般程序員在開發時設置爲true,交給客戶時設置爲false.

4<customErrors>

格式: <customErrors  mode="RemoteOnly"  defaultRedirect="error.aspx">

                  <error statusCode="440" redirect="err440page.aspx"/>

<error statusCode="500" redirect="err500Page.aspx"/>

</customErrors>

Imode:具有OnOffRemoteOnly 3種狀態。On表示始終顯示自定義的信息;Off表示始終顯示詳細的asp.net錯誤信息;RemoteOnly表示只對不在本地Web服務器上運行的用戶顯示自定義信息。

IIdefaultRedirect:用於出現錯誤時重定向的URL地址,是可選的。

IIIstatusCode:指明錯誤狀態碼,表明一種特定的出錯狀態。

IVredirect:錯誤重定向的URL

5<globalization>

格式:<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>

IrequestEncoding:它用來檢查每一個發來請求的編碼。

IIresponseEncoding:用於檢查發回的響應內容編碼。

IIIfileEncoding:用於檢查aspx,asax等文件解析的默認編碼。

6<sessionState>

格式:<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424"

sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/>

Imode:分爲offInprocStateServerSqlServer幾種狀態。

    Mode="InProc"存儲在進程中特點:具有最佳的性能,速度最快,但不能跨多臺服務器存儲共享。mode = "StateServer" 存儲在狀態服務器中特點:當需要跨服務器維護用戶會話信息時,使用此方法。但是信息存儲在狀態服務器上,一旦狀態服務器出現故障,信息將丟失。mode="SqlServer"存儲在sql server中特點:工作負載會變大,但信息不會丟失。

IIstateConnectionString:指定asp.net應用程序存儲遠程會話狀態的服務器名,默認爲本機。

IIIsqlConnectionString:當用會話狀態爲數據庫時,在這裏設置連接字符串。

IVCookieless:設置爲true時,表示不使用cookie會話狀態來標識客戶;否則,相反。

VTimeOut:用來定義會話狀態存儲的時間,超過期限,將自動終止會話。

關於sessionState的詳細講解,請參考:

http://blog.csdn.net/yszwn/archive/2009/12/18/5033576.aspx

7<authentication>

格式:<authentication mode="Forms">

          <forms name=".ASPXUSERDEMO" loginUrl="Login.aspx" protection="All" timeout="30"/>

      </authentication>

該元素只能在計算機、站點或應用程序級別聲明。< authentication> 元素必需與<authorization> 節配合使用。驗證模式有以下四種:

IWindows:使用IIS驗證方式,IIS根據應用程序的設置執行身份驗證,(基本、簡要或集成 Windows)。在 IIS 中必須禁用匿名訪問。

IIForms:使用基於窗體的驗證方式,爲用戶提供一個輸入憑據的自定義窗體(Web ),然後在您的應用程序中驗證他們的身份。用戶憑據標記存儲在Cookie中。

IIIPassport:採用Passport cookie驗證模式,"Passport"身份驗證是通過Microsoft的集中身份驗證服務執行的,它爲成員站點提供單獨登錄和核心配置文件服務。

IVNone:不執行身份驗證。

裏面內嵌Forms節點的屬性涵義:

IName:指定完成身份驗證的Http cookie的名稱。

IILoginUrl:如果未通過驗證或超時後重定向的頁面URL,一般爲登錄頁面,讓用戶重新登錄。

IIIProtection:指定 cookie數據的保護方式,可設置爲:AllNoneEncryptionValidation四種保護方式。其中,All表示加密數據,並進行有效性驗證;Encryption表示對Cookie內容進行加密;validation表示對Cookie內容進行有效性驗證;None表示不保護Cookie

IVTimeOut:指定Cookie的失效時間,超時後要重新登錄。

注:如果選擇的是Form驗證,在登錄成功後要創建身份驗證票, 表明已經通過認證的合法用戶。例如:

if(IsLoadSucessful)

{

System.Web.Security.FormsAuthentication.SetAuthCookie(UserName, false)

}

8<authorization>

格式: <authorization><allow users="*"/></authorization>

//或者<authorization><deny users="?"/></authorization>

該節控制對 URL 資源的客戶端訪問(如允許匿名用戶訪問)。此元素可以在任何級別(計算機、站點、應用程序、子目錄或頁)上聲明。必需與<authentication> 節配合使用。

該節設置應用程序的授權策略。可以允許或拒絕不同的用戶或角色訪問應用程序資源。通配符: "*" 表示任何人,"?" 表示匿名 (未經身份驗證的)用戶。

注:如果拒絕匿名用戶訪問,但是有註冊頁面允許匿名用戶訪問,需要添加<location path="userReg.aspx">,這表示允許匿名用戶訪問userReg.aspx頁面,這段代碼應該添加在<configuration><system.web>之間,而不應該包含到<system.web>..</system.web>之間。另外,你可以使用user.identity.name來獲取已經過驗證的當前的用戶名;可以使用web.Security.FormsAuthentication.RedirectFromLoginPage方法將已驗證的用戶重定向到用戶剛纔請求的頁面。

9<httpRuntime>

格式:<httpRuntime maxRequestLength="4096" executionTimeout="60" appRequestQueueLimit="100"/>

該節配置 ASP.NET HTTP 運行庫設置,可以在計算機、站點、應用程序和子目錄級別聲明。

ImaxRequestLength:控制用戶上傳文件,單位爲KB

IIexecutionTimeout:最長時間,單位爲S

IIIappRequestQueueLimit:最多請求數。

10<pages>

格式:<pages buffer="true" enableViewStateMac="true" validateRequest="false"/>

該節標識特定於頁的配置設置(如是否啓用會話狀態、視圖狀態,是否檢測用戶的輸入等),可以在計算機、站點、應用程序和子目錄級別聲明。

格式示例的意思爲不檢測用戶在瀏覽器輸入的內容中是否存在潛在的危險數據(注:該項默認是檢測,如果你使用了不檢測,一要對用戶的輸入進行編碼或驗證),在從客戶端回發頁時將檢查加密的視圖狀態,以驗證視圖狀態是否已在客戶端被篡改。(注:該項默認是不驗證)

11<trace>

格式:trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />

Ienabled:表示是否啓用跟蹤

IIrequestLimit:表示指定在服務器上存儲的跟蹤請求的數目。

IIIpageOutput="false"表示只能通過跟蹤實用工具訪問跟蹤輸出。

IVtraceMode="SortByTime"表示以處理跟蹤的順序來顯示跟蹤信息。

VlocalOnly="true" 表示跟蹤查看器 (trace.axd) 只用於宿主 Web 服務器。

四、自定義配置文件

爲了增加應用程序的可移植性,通常網站需要配置一些自定義的節點,例如:文件上傳的路徑等,再深入的應用,可以定義工廠方法需要創建的類。

第一種方式是在<appSetting>節點中增加自定義配置,例如:

 

 

第三種方式是在configSections節點下定義自定義節點,這種方式是我們在用第一種方式不宜使用的情況下的最佳使用方式。

首先定義自己的節點,定義自己的節點必須在configSections節點中,定義方法如下:

sectionGroup 元素充當 section 元素的容器,section 元素將配置節處理程序與配置元素或節關聯。由於 ASP.NET 不對如何處理配置文件內的設置作任何假設,因此這非常必要。但 ASP.NET 會將配置數據的處理委託給配置節處理程序,(稍候說明。)每個 section 元素均標識一個配置節或元素。可以在 sectionGroup 元素中對 section 元素進行邏輯分組,以對 section 元素進行組織並避免命名衝突。section sectionGroup 元素包含在 configSections 元素中。

sectionGroup節點屬性:

name:必選的 String 屬性,這是 group 元素在配置文件的節設置區域中使用的名稱。

section節點屬性:

name:必選的 String 屬性,指定與 type 屬性中指定的配置節處理程序關聯的配置節或元素的名稱。這是該元素在配置文件的節設置區域中使用的名稱。

type:必選的 String 屬性,指定用來執行如下操作的配置節處理程序類的名稱:處理在 name 屬性中指定的節或元素中的配置設置。

現在定義好了自己的節點,可以使用該節點了。使用方法如下:

定義好了自己的節點,如何讀取節點信息呢?以下是msdn上的原話:

您可以用自己的 XML 配置元素來擴展標準的 ASP.NET 配置設置集。若要完成該操作,您必須創建自己的配置節處理程序。該處理程序必須是一個實現 System.Configuration.IConfigurationSectionHandler 接口或 System.Configuration.ConfigurationSection 類的 .NET Framework 類。

節處理程序解釋並處理 Web.config 文件特定部分中 XML 配置元素中定義的設置,並根據配置設置返回適當的配置對象。處理程序類返回的配置對象可以是任何數據結構;它不限於任何基配置類或配置格式。ASP.NET 使用該配置對象,以對自定義配置元素進行讀取和寫入。

上面這段話的意思就是說,我們要定義一個類,這個類要繼承自System.Configuration.IConfigurationSectionHandler 接口或 System.Configuration.ConfigurationSection 類。

然後用這個類來處理我們自定義的節點。

我們看到System.Configuration.IConfigurationSectionHandler接口中,只有一個方法:

 

返回值

創建的節處理程序對象。

這個類是幹什麼用的呢?讓我們通過一個例子來看看。

首先,我們新建一個網站項目,並在web.config中加入以下節點:

以上我們在WebSiteInfo節點下定義了兩個節點basicInfofileUpload,並定義了節點處理程序類ConfigurationSectionTest.WebSiteInfoHandler,並且隨後運用了我們定義的節點。

我們來看看節點處理程序ConfigurationSectionTest.WebSiteInfoHandler

任意建立一個項目,新建一個類,或者直接在App_Code裏新建一個類,如下:

並在Create函數中設置一個斷點。

  

然後在Default.aspxPage_Load事件處理程序中去訪問我們自定義的節點,並在ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo"); 這條語句上設置斷點。

  

好了,我們啓動調試,看到程序首先執行到ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo");這句。

然後執行到ConfigurationSectionTest.WebSiteInfoHandler中的Create函數。

我們再看看這時處理函數中參數的值:

parentnull

configContext 爲配置上下文對象。

section InnerXml<add key="name" value="huchen's homepage" /><add key="version" value="1.0" />

 

F11繼續執行return "hello", 繼續執行...

在執行到Object o = ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo")後面的“}“,我們發現o的值爲”hello”

 

相信您已經明白的差不多了,當讀取自定義節點的內容時,程序去執行我們定義的節點處理程序,並把節點中的內容傳給Create函數中的參數。然後我們在Create中自己處理節點下的內容,並返回我們格式化後的節點內容給調用者,也就是ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo")

好,知道這些以後,我們就來完善我們的代碼,我們在Create中處理傳進來的節點內容。 

爲了簡單起見,我們引入兩個類NameValueCollectionNameValueSectionHandler

NameValueCollection:表示可通過鍵或索引訪問的關聯 String 鍵和 String 值的集合。

NameValueSectionHandler:提供配置節中的名稱/值對配置信息。NameValueSectionHandler 這個類也繼承IConfigurationSectionHandler
反編譯可以看出NameValueSectionHandler Create方法把參數section的結果轉化成了一個集合,就是NameValueCollection

那麼我們可以在節點處理程序中的Create函數中寫如下代碼:

NameValueCollection configs;
NameValueSectionHandler baseHandler = new NameValueSectionHandler();
configs =(NameValueCollection)baseHandler.Create(parent,configContext,section);
Return configs;

這樣我們就可以這樣訪問我們的節點了:

string myWebSiteName = ((NameValueCollection)ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo"))["name"];
Response.Write(myWebSiteName);

Ctrl+F5運行,可以看到頁面輸出了huchen's homepage 

以上關於自定義節點的第三種方法引自:http://www.cnblogs.com/huc87/archive/2009/05/06/1450981.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章