本篇來講講對web.config檔案的讀寫,並不是誰都可以對web.config檔案進行讀寫操作的,必須要有一定的許可權才行的。
其實在web.config中的很多的配置節點都是與一個類相對應的,我們可以通過相應的類來,利用其強型別的API來對相應的配置進行訪問,而不用把web.config 當做一個XML來讀取。
我們可以用兩種方式來對設定檔進行訪問,首先,可以用強型別的API來訪問,這就要用要ConfigurationManager類。如下:
using System.Web.Configuration;
using System.Configuration;
protected void Page_Load(object sender, EventArgs e)
{
SessionStateSection sts =(SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState");
Response.Write("The session state mode is: " + sts.Mode.ToString() + "<br/>");
}
大家應該可以看到,其實我們現在就是對sessionState節點進行訪問。
在ConfigurationManager中有一個靜態方法GetSection,傳入我們要訪問節點的XPath,如上面的system.web/sessionState,然後把結果轉換為對應的強型別,我們就可以訪問節點的屬性等資訊。在System.Web.Configuration空間中,我們可以找到對應節點的強型別。
有一點要注意的就是:ConfigurationManager僅僅只能處理當前網站中的web.config,也就是說它不能處理別的網站的中的設定檔。如我們現在的網站是DemoA,那麼上面的執行個體代碼訪問的就是DemoA中的web.config,不能訪問DemoB中的web.config。
但是我們還可以用第二種方法來做,就是用WebConfigurationManager。代碼如下:
using System.Web.Configuration;
using System.Configuration;
protected void Page_Load(object sender, EventArgs e)
{
MembershipSection ms = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership", "~/web.config");
Response.Write("The default provider as set in config is: " +
ms.DefaultProvider + "<br/>");}
}
上面的代碼中,注意GetSection的第二個參數就申明了web.config的路徑,上面的代碼訪問的是當前網站中的設定檔,我們還訪問其他網站中的設定檔。
上面講述了怎麼來讀取一個設定檔,下面就來看看怎麼對設定檔進行寫的操作。
當對設定檔進行寫的操作的時候,就要求我們確確實實的開啟設定檔,而不僅僅只是返回一個設定檔的引用。也就是說,我們不能用ConfigurationManager來進行寫的操作,因為它只是返回一個System.Configuration.Configuration的引用。所以我們應該用WebConfigurationManager來對設定檔進行寫的操作。
當我們用編程的方式開啟設定檔,設定了一些屬性後,就可以用Configuration.Save()來儲存修改。如:
using System.Web.Configuration;
protected void Page_Load(object sender, EventArgs e)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
MembershipSection ms =(MembershipSection)config.GetSection("system.web/membership");
ms.DefaultProvider = "someOtherProvider";
config.Save();
}
注意:OpenWebConfiguration方法有很多的重載,"~"表示我們開啟的是當前網站的設定檔。還有一點很中的就是,設定檔系統沒有對多線程進行同步和鎖。所以載我們寫一個設定檔的時候最好注意這點。