天天看點

asp.net web.config配置節說明

web.config 檔案查找規則:

      (1)如果在目前頁面所在目錄下存在web.config檔案,檢視是否存在所要查找的結點名稱,如果存在傳回結果并停止查找。

      (2)如果目前頁面所在目錄下不存在web.config檔案或者web.config檔案中不存在該結點名,則查找它的上級目錄,直到網站的根目錄。

      (3)如果網站根目錄下不存在web.config檔案或者web.config檔案中不存在該節點名則在%windir%"Microsoft.NET"Framework"v2.0.50727"CONFIG"web.config檔案中查找。

      (4) 如果在%windir%"Microsoft.NET"Framework"v2.0.50727"CONFIG"web.config檔案中不存在相應 結點,則在%windir%"Microsoft.NET"Framework"v2.0.50727"CONFIG"machine.config檔案 中查找。

      (5)如果仍然沒有找到則傳回null。

      在asp.net應用程式運作過程中,如果web.config檔案發生更改就會導緻相應的應用程式重新啟動,這時存儲在伺服器記憶體中的使用者會話資訊 就會丢失(如存儲在記憶體中的Session)。

 (一) appSetings配置節

      <appSettings>節點主要用來存儲asp.net應用程式的一些配置資訊,比如上傳檔案的儲存路徑等

      <appSettings>

            <add key="ImageType" value=".jpg;.bmp;.gif;.png;.jpeg"/> <!--允許上傳的圖檔格式類型--> 

      </appSettings>

      string fileType=ConfigurationManager.AppSettings["FileType "];

(二) <connectionStrings>節點

      <connectionStrings> 節點主要用于配置資料庫連接配接的,我們可以<connectionStrings>節點中增加任意個節點來儲存資料庫連接配接字元串,将來在代碼中 通過代碼的方式動态擷取節點的值來執行個體化資料庫連接配接對象,這樣一旦部署的時候資料庫連接配接資訊發生變化我們僅需要更改此處的配置即可,而不必因為資料庫連接配接 資訊的變化而需要改動程式代碼和重新部署

      <connectionStrings> 

            <add name="AspNetStudyConnectionString1" connectionString="Data Source=(local);Initial Catalog=AspNetStudy;User ID=sa;Password=sa"/>

      </connectionString>

      string connectionString = ConfigurationManager.ConnectionStrings["AspNetStudyConnectionString1"].ConnectionString;

(三)<compilation>節點

      <compilation>節點配置 ASP.NET 使用的所有編譯設定。預設的debug屬性為“true”,即允許調試,在這種情況下會影響網站的性能,是以在程式編譯完成傳遞使用之後應将其設為“false”。

(四)<authentication>節點

      設定asp.net身份驗證模式,有四種身份驗證模式,它們的值分别如下:

            Windows 使用Windows身份驗證,适用于域使用者或者區域網路使用者。

            Forms 使用表單驗證,依靠網站開發人員進行身份驗證。

            Passport 使用微軟提供的身份驗證服務進行身份驗證。

            None 不進行任何身份驗證。

(五)<customErrors>節點

      <customErrors>節點用于定義 一些自定義錯誤資訊的資訊。此節點有Mode和defaultRedirect兩個屬性,其中defaultRedirect屬性是一個可選屬性,表示應 用程式發生錯誤時重定向到的預設URL,如果沒有指定該屬性則顯示一般性錯誤。Mode屬性是一個必選屬性,它有三個可能值,它們所代表的意義分别如下:

      On 表示在本地和遠端使用者都會看到自定義錯誤資訊。

      Off 禁用自定義錯誤資訊,本地和遠端使用者都會看到詳細的錯誤資訊。

      RemoteOnly 表示本地使用者将看到詳細錯誤資訊,而遠端使用者将會看到自定義錯誤資訊。

這 裡有必要說明一下本地使用者和遠端使用者的概念。當我們通路asp.net應用程時所使用的機器和釋出asp.net應用程式所使用的機器為同一台機器時成為 本地使用者,反之則稱之為遠端使用者。在開發調試階段為了便于查找錯誤Mode屬性建議設定為Off,而在部署階段應将Mode屬性設定為On或者 RemoteOnly,以避免這些詳細的錯誤資訊暴露了程式代碼細節進而引來黑客的入侵。

(六)<error>子節點

      在<customErrors>節點下還包含有< error>子節點,這個節點主要是根據伺服器的HTTP錯誤狀态代碼而重定向到我們自定義的錯誤頁面,注意要使<error>子節點 下的配置生效,必須将<customErrors>節點節點的Mode屬性設定為“On”。下面是一個例子: 

            <customErrors mode="On" defaultRedirect="GenericErrorPage.htm"> 

                  <error statusCode="403" redirect="403.htm" />

                  <error statusCode="404" redirect="404.htm" />

            </customErrors>

(七)<httpHandlers>節點

      <httpHandlers>節點用于根據使用者請求的URL和HTTP謂詞将使用者的請求交給相應的處理程式。可以在配置級别的任何層次配置此節點,也就是說可以針對某個特定目錄下指定的特殊檔案進行特殊處理。

      <httpHandlers>

            <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

            <add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="true"/>

            <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true"/>

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

            <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>

            <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="true"/>

            <add path="*.asmx" verb="*" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>

            <add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

            <add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

            <add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="true"/>

            <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="true"/>

            <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/> 

            <add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/> 

            <add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/> 

            <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/> 

            <add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

            <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

            <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="true"/>

            <add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="true"/>

      </httpHandlers>

      從上面的配置中可以看出,針對*.mdf、*.ldf檔案的Get或者Post請求都會交給 System.Web.HttpForbiddenHandler來處理,處理的結果就是使用者不能檢視或者下載下傳相關的檔案。如果我們某個檔案夾下的檔案或 者某個類型的檔案不允許使用者下載下傳,可以在</httpHandlers>節點中增加相應的子節點。

      下面我們以一個例子來說明<httpHandlers>節點的用法,在我們的asp.net應用程式中建立一個IPData目錄,在IPData目錄中建立一個IPData.txt檔案,然後在Web.config中添加以下配置:

            <httpHandlers>

                  <add path="IPData/*.txt" verb="*" type="System.Web.HttpForbiddenHandler"/>

            </httpHandlers>

(九)<httpRuntime>節點

      <httpRuntime>節點用于對 ASP.NET HTTP 運作庫設定。該節可以在計算機、站點、應用程式和子目錄級别聲明。

例如下面的配置控制使用者最大能上傳的檔案為40M(40*1024K),最大逾時時間為60秒,最大并發請求為100個

      <httpRuntime maxRequestLength="40960" executionTimeout="60" appRequestQueueLimit="100"/>

(十)<pages>節點

      <pages>節點用于表示對特定頁設定,主要有三個屬性,分别如下:

      buffer 是否啟用了 HTTP 響應緩沖。

      enableViewStateMac 是否應該對頁的視圖狀态運作計算機身份驗證檢查 (MAC),以放置使用者篡改,預設為false,如果設定為true将會引起性能的降低。

      validateRequest  是否驗證使用者輸入中有跨站點腳本攻擊和SQL注入式漏洞攻擊,預設為true,如果出現比對情況就會發HttpRequestValidationException 異常。對于包含有線上文本編輯器頁面一般自行驗證使用者輸入而将此屬性設為false。

      <pages buffer="true" enableViewStateMac="true" validateRequest="false"/>

(十一)<sessionState>節點

      <sessionState>節點用于配置目前asp.net應用程式的會話狀态配置。以下就是一個常見配置:

            <sessionState cookieless="false" mode="InProc" timeout="30" />

      上面的節點配置是設定在asp.net應用程式中啟用Cookie,并且指定會話狀态模式為在程序中儲存會話狀态,同時還指定了會話逾時為30分鐘。

      <sessionState>節點的Mode屬性可以是以下幾種值之一:

      Custom 使用自定義資料來存儲會話狀态資料。

      InProc 預設值。由asp.net輔助程序來存儲會話狀态資料。

      Off 禁用會話狀态。

      SQLServer 使用程序外SQL Server資料庫儲存會話狀态資料。

      StateServer 使用程序外 ASP.NET 狀态服務存儲狀态資訊。

      一般預設情況下使用InProc模式來存儲會話狀态資料,這種模式的好處是存取速度快,缺點是比較占用記憶體,是以不宜在這種模式下存儲大型的使用者會話資料

(十二)<globalization>節點

      用于配置應用程式的全球化設定。此節點有幾個比較重要的屬性,分别如下:

      fileEncoding 可選屬性。設定.aspx、.asmx 和 .asax 檔案的存儲編碼。

      requestEncoding 可選屬性。設定用戶端請求的編碼,預設為UTF-8.

      responseEncoding 可選屬性。設定伺服器端響應的編碼,預設為UTF-8.

      以下就是asp.net應用程式中的預設配置:

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

(十三)web.config檔案讀寫

 public void SetAppSetting(string key, string value)

{

      AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");

      if (appSetting.Settings[key] == null)//如果不存在此節點,則添加 

      {

            appSetting.Settings.Add(key, value);

       }

      else//如果存在此節點,則修改 

       {

             appSetting.Settings[key].Value = value;

      }

}