通过编程读写 web.config 中的配置节

       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 + "<br />");
}

image

       使用 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();
}
<appSettings>
  <add key="websiteName" value="My Website1" />
  <add key="welcomeMessage" value="Hello again!" />
</appSettings>

       这个应用程序反应了根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:只保存与继承级别不同的值。(默认选项)

原文地址:https://www.cnblogs.com/SkySoot/p/2584351.html