ASP.NET 在 System.Web.Configuration 命名空间中提供 WebConfigurationManager 类,它允许在运行时从配置文件获取信息。为使用方便,应先引入 System.Web.Configuration 命名空间。
AppSettings 属性
提供对应用程序配置文件的 <appSetting> 节的所有自定义信息的访问,每个设置通过一个按名称索引的集合提供。
string isdn1 = WebConfigurationManager.AppSettings["ISDN1"];
ConnectionStrings 属性
提供对应用程序配置文件的 <ConnectionStrings> 节的所有自定义信息的访问,每个设置通过一个按名称索引的集合提供。
string conStr = WebConfigurationManager.ConnectionStrings["NorthwindConnection"].ConnectionString;
GetSection() 方法
返回一个封装了配置文件特定配置节信息的对象。
AuthenticationSection authSection = WebConfigurationManager.GetSection("System.web/authentication") as AuthenticationSection;
搜索使用类似路径的语法执行。不必制定根元素<configuration>,因为所有的配置节都包含在这个元素里。所有配置节的类都定义在 System.Web.Configuration 命名空间的类库里(不在 System.Configuration 中,它只包含所有 .NET 应用程序通用的配置类),所有这些类都继承 System.Configuration.ConfigurationSection 类。
通过 ConfigurationSection 对象,可以获得应用程序当前状态的很多信息。
下面这个示例显示当前引用的程序集的信息:
CompilationSection compSection = WebConfigurationManager.GetSection("system.web/compilation") as CompilationSection;
foreach (AssemblyInfo assm in compSection.Assemblies)
{
Response.Write(assm.Assembly + "");
}
使用 GetSection()方法或后面要介绍的OpenWebConfiguration()方法获取信息时,它们反应的是当前应用程序的符合配置信息。也就是说,是当前web.config文件和那些更高层次的配置文件(例如,跟web。config和machine.config文件)里定义的信息的合并结果。
OpenWebConfiguration() 方法
返回一个可编辑的 Configuration 对象,它提供对指定 Web 应用程序的配置信息的访问。
可以通过 WebConfigurationManager 类修改大多数的配置节,实际上,ASP.NET 管理网页就依赖这一功能。首先调用 OpenWebConfiguration() 方法得到一个 Configuration 对象,然后使用该对象的 GetSection() 方法获取需要修改的配置节,并用 Save() 方法提交修改。
修改设置时,ASP.NET 会使用同步代码保证多个用户不能同时提交更新来安全地处理更新。
对于你的代码,你最可能修改的是 <appSettings>和<connectionStrings>节的设置。
protected void Page_Load(object sender, EventArgs e)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
Label1.Text = config.AppSettings.Settings["websiteName"].Value;
Label2.Text = config.AppSettings.Settings["welcomeMessage"].Value;
config.AppSettings.Settings["welcomeMessage"].Value = "Hello again!";
config.Save();
}
这个应用程序反应了根Web应用程序目录的累积配置,因为它在调用 OpenWebConfiguration() 方法时传递的值是 Request.ApplicationPath;如果使用子目录的名字,将会得到子目录文件夹的累积设置;如果使用 Request.CurrentExecutionFilePath 路径,将会得到当前网页所在目录的累积设置项。
必须注意
web.config文件绝不是状态管理的理想方案!它只适合偶尔更新设置,因为修改配置设置的代价很大。文件访问速度很慢,修改时的同步化增加了额外的负担,真正严重的是,每次修改配置设置时创建新应用程序域的代价非常大,页面要重新编译为本机代码,并缓存和加载。更糟的是,Application和Caching中的值会丢失,如果你使用进程内的会话提供程序,Session集合中的信息也会丢失。
还要明白的一点是,如果修改了继承的设置(如machine.config文件中的设置),那么保存变更时,修改的值不会覆盖配置文件中现有的值。相反,新值被保存在本地的web.config文件中,它只会覆盖当前应用程序继承的值,这是一种安全保障机制。
你还可以使用 SaveAs()把配置文件保存到其他文件中。
Save()方法还可以接受一个枚举参数:
ConfigurationSaveMode.Modified:保存你所改变的所有的值,即使它们和继承的值没有差异。
ConfigurationSaveMode.Full:把所有内容保存在本地web.config,这在测试盒发布重复配置文件时非常有用。
ConfigurationSaveMode.Minimal:只保存与继承级别不同的值。(默认选项)