IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置:首頁網(wǎng)絡(luò)編程.Net編程 → Asp.net中的web.config配置

Asp.net中的web.config配置

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

  web.config是ASP.NET中保存配置信息(比如數(shù)據(jù)庫連接字符串等)的重要文件。它是基于xml的文本文件方式放在Web應(yīng)用程序的任何目錄中,并且默認不隨源文件編譯到Dll中,而運行環(huán)境隨時監(jiān)視著它是否有改變,一但有變動,系統(tǒng)會自動重新加載里面的最新內(nèi)容。

  一、 配置文件保存位置

  .net的默認配置文件保存在"windows目錄\Microsoft.NET\Framework\對應(yīng).net版本\config"文件夾下面。不同的操作系統(tǒng)windows目錄不一樣,我們在命令行下輸入"echo %windir%"查看windows目錄所在的位置。

clip_image001[1]
圖:web.config所在的目錄

  Asp.net中有兩個非常重要的配置文件,分別是machine.config和web.config,它們都位于config文件夾下面。這兩個文件一般不需要我們手工是維護它,保持默認即可。但針對asp.net應(yīng)用程序,它自身會有0個,1個或者多個web.config配置文件,多個配置文件會存在加載順序問題。下節(jié)會介紹。

  注意,傳說中.net3.0和.net3.5只是在.net2.0的基礎(chǔ)上擴充中,所以還是沒用的.net2.0的配置文件。它們連config這個目錄都沒有。

  二、 配置文件加載順序

  iis在Asp.net網(wǎng)站啟動時,會加載配置文件中的配置信息,然后緩存這些信息,不會每次要用都去讀取配置文件,只是IIS會隨時監(jiān)視著這些文件的變化,一量有變化,它會重新去讀取并緩存配置信息。

  Asp.net網(wǎng)站運行時會按照以下方式加載配置文件中的節(jié)點信息:

  1) 如果在當前運行頁面所在的目錄下有web.config文件,則查找是否存在所需要的節(jié)點,如果存在則返回結(jié)果,并停止下一步地查找。

  2) 如里所在目錄不存在web.config配置或者配置文件里沒有所需要的節(jié)點,則查找它所在的上一級目錄的配置文件中的節(jié)點,直到網(wǎng)站根目錄。(問題:IIS6中的虛擬目錄算不算根目錄)

  3) 如果網(wǎng)站根目錄中都不存在web.config或者所需要的配置節(jié)點,轉(zhuǎn)而到"windows目錄\Microsoft.NET\Framework\對應(yīng).net版本\config\web.config"中去查找。

  4) 如果第3條中還沒找到,繼續(xù)到"windows目錄\Microsoft.NET\Framework\對應(yīng).net版本\config\machine.config"中去查找。

  5) 如果還沒找到,那就報錯吧。

  存在兩個問題

  1) IIS6中的虛擬目錄算不算根目錄。

  2) 在系統(tǒng)運行時,在一個原本沒有web.config的目錄中手工加上一個web.config,會不會自動加載。

  三、 配置文件節(jié)點介紹

  Web.config文件是一個xml文本文件,它的根節(jié)點為<configuration>,該節(jié)點下包含常見的子節(jié)點有:<configSections>、<appSettings>、<connectionStrings>(保存數(shù)據(jù)庫連接字符串)、<location>和<system.web>。下面針對各節(jié)點配置進行介紹。

  1. <configSections>

  configSections 元素指定了配置節(jié)和處理程序聲明。由于 ASP.NET 不對如何處理配置文件內(nèi)的設(shè)置作任何假設(shè),因此這非常必要。但 ASP.NET 會將配置數(shù)據(jù)的處理委托給配置節(jié)處理程序。配置結(jié)構(gòu)信息如下:

  <configSections>

  <!--定義配置節(jié)處理程序與配置元素之間的關(guān)聯(lián)。-->

  <section />

  <!--定義配置節(jié)處理程序與配置節(jié)之間的關(guān)聯(lián)。-->

  <sectionGroup />

  <!--移除對繼承的節(jié)和節(jié)組的引用。-->

  <remove />

  <!--移除對繼承的節(jié)和節(jié)組的所有引用,只允許由當前 section 和 sectionGroup 元素添加的節(jié)和節(jié)組。-->

  <clear/>

  </configSections>

  每個 section 元素標識一個配置節(jié)或元素以及對該配置節(jié)或元素進行處理的關(guān)聯(lián) ConfigurationSection 派生類?梢栽 sectionGroup 元素中對 section 元素進行邏輯分組,以對 section 元素進行組織并避免命名沖突。section 和 sectionGroup 元素包含在 configSections 元素中。

  如果配置文件中包含 configSections 元素,則 configSections 元素必須是 configuration 元素的第一個子元素。

  下面我們來示例寫一個自定義配置信息,并完成它的SectionHandler,首先我們在<configuration>節(jié)點下添加configSections。

  <configuration>

  <configSections>

  <sectionGroup name="mySectionGroup">

  <section name="mySection" requirePermission="true"

  type="ConfigTest.SectionHandler.MySectionHandler,ConfigTest.SectionHandler" />

  </sectionGroup>

  </configSections>

  <mySectionGroup>

  <mySection>

  <add key="key1" value="value1" />

  <add key="key2" value="value2" />

  <add key="key3" value="value3" />

  <add key="key4" value="value4" />

  <add key="key5" value="value5" />

  </mySection>

  </mySectionGroup>

  <system.web>

  <compilation debug="true" targetFramework="4.0" />

  </system.web>

  </configuration>

  編寫自定義SectionHandler,我們?yōu)镸ySectionHandler返回一個Hashtable的數(shù)據(jù)。

  namespace ConfigTest.SectionHandler

  {

  public class MySectionHandler : IConfigurationSectionHandler

  {

  public object Create(object parent, object configContext, System.Xml.XmlNode section)

  {

  Hashtable ht = new Hashtable();

  foreach (XmlNode node in section.ChildNodes)

  {

  if (node.Name == "add")

  {

  ht.Add(node.Attributes["key"].Value, node.Attributes["value"].Value);

  }

  }

  return ht;

  }

  }

  }

  在頁面中使用該Section,由ConfigurationManager.GetSection得到SectionHandler返回的Hashtable。注意參數(shù)結(jié)構(gòu)。

  protected void Page_Load(object sender, EventArgs e)

  {

  Hashtable ht = ConfigurationManager.GetSection("mySectionGroup/mySection") as Hashtable;

  foreach (DictionaryEntry de in ht)

  {

  Response.Write(de.Key + " - " + de.Value + "<br>");

  }

  }

  2. <appSettings>

  該節(jié)點下主要用來存儲asp.net應(yīng)用程序的一些配置信息,也可以把數(shù)據(jù)庫連接字符串也放在這里,不過.net2.0提供了connectionStrings節(jié)點,所以數(shù)據(jù)庫連接字符串還是不建議放在這里,下面為一個圖片類型的實例。

  <appSettings>

  <!--圖片類型擴展名-->

  <add key="ImgType" value=".bmp;.jpg;.gif;.png"/>

  </appSettings>

  調(diào)用方法為:

  string ImgType = ConfigurationManager.AppSettings["ImgType"];

  3. <connectionStrings>

  connectionStrings和appSettings類似,不過用于保存配置數(shù)據(jù)庫連接信息,下面給一個實例。

  <connectionStrings>

  <add name="SqlserverConnStr" connectionString="Data Source=Aron1;Initial Catalog= pubs;UserId=sa;Password=asdasd;"/>

  <add name="OrcleConnStr" connectionString="Provider=msdaora;Data Source= MyoracleDB;UserId=UserName;Password=asdasd;"/>

  </connectionStrings>

  調(diào)用方式為:

  string connStr = ConfigurationManager.ConnectionStrings["SqlserverConnStr"].ConnectionString;

  4. <system.web>

  <system.web>為.net應(yīng)用程序的行為方式配置節(jié)點,該節(jié)點包含很多子節(jié)點,很多子節(jié)點已經(jīng)由.net配置好了,這里我們只來看看一些重要的配置節(jié)點。

  ? <customErrors>

  <customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">

  <error statusCode="500" redirect="InternalError.htm"/>

  </customErrors>

  其中mode屬性有三種值,On/Off/RemoteOnly,默認為Rem

關(guān)鍵詞標簽:Asp.net

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 手把手教你用好LINQ to SQL手把手教你用好LINQ to SQL在.NET環(huán)境下為網(wǎng)站增加IP過濾功能在.NET環(huán)境下為網(wǎng)站增加IP過濾功能ASP.NET 如何避免頁面重新整理時重復送出ASP.NET 如何避免頁面重新整理時重復送出用Asp.net擴展ExtJS用Asp.net擴展ExtJS

相關(guān)下載

人氣排行 asp.net表單提交方法GET\POST在ASP.NET中如何判斷用戶IE瀏覽器的版本Asp.net中messagebox的實現(xiàn)方法Asp.net中的web.config配置在ASP.NET MVC中實現(xiàn)大文件異步上傳用Iformattable接口控制.Net中文本格式c#.Net經(jīng)典面試題目用Asp.net擴展ExtJS