asp.net2.0里web.config配置的读写
在asp.net2.0里不但进一步扩展了配置文件web.config,更为重要的是系统提供了一组api函数,让我们可以以编程的方式从配置文件里提取信息
首先,先看看如果从web.config里提取appsettings里的配置值,示例代码如下:
利用asp.net2.0提供的一组api函数,您可以很容易的获取appsettingssection里所有的keys/value组对,如下:
configuration config
= webconfigurationmanager.openwebconfiguration(request.applicationpath);
appsettingssection appsettings = (appsettingssection) config.getsection("appsettings");
string[] appkeys = appsettings.settings.allkeys;
for (int i = 0; i < appsettings.settings.count; i++)
...{
//这里只进行简单的输出
response.write(appsettings.settings[appkeys].value);
response.write("<br>");
}
上面代码只是进行简单的输出所有key的value值,然而,你可能想获取的仅仅是某一个key的值,这也非常简单,如下:
configuration config = webconfigurationmanager.openwebconfiguration(request.applicationpath);
appsettingssection appsettings = (appsettingssection)config.getsection("appsettings");
string patetitle= appsettings.settings["pagetitle"].value; //获取key为patetitle的value值
string sitelogo= appsettings.settings["sitelogo"].value; //获取key为sitelogo的value值
对于数据库连接字符串,在asp.net2.0里提供了专门的配置节如下:
<connectionstrings>
<add name="connectionstring"
connectionstring="data source=sqlexpress;attachdbfilename=jsskdb.mdf; … .."/>
<add name="myproviderconnectionstring"
connectionstring="data source=sqlexpress;integrated security=true; … …"/>
</connectionstrings>
这样我们很容易获取数据库连接字符串如下:
configuration config
= webconfigurationmanager.openwebconfiguration(request.applicationpath);
connectionstringssection consection = (connectionstringssection)config.getsection("connectionstring ");
connectionstringsettingscollection concollection = consection.connectionstrings;
foreach (connectionstringsettings consetting in concollection)
...{
response.write(consetting.connectionstring);
response.write("<br>");
}
另外,利用api函数,你同时还可以在代码里更改web.config数据库连接的配置的值,如下
configuration config = webconfigurationmanager.openwebconfiguration(request.applicationpath);
connectionstringssection consection
= (connectionstringssection)config.getsection("connectionstrings");
consection.connectionstrings["sqlconnectionstring"].connectionstring =
"data source=sqlexpress;integrated security=true; … …";
config.save();
这里最有意思的可能就是类的转换,在<appsettings ></appsettings>里,使用的是appsettingssection类,在<connectionstrings></ connectionstrings>里使用的的是connectionstringssection类,事实上,asp.net2.0提供的一组函数都是“配置节名+section”的形式提供的类。
在asp.net官方网站曾经对此专门介绍,可以找不到该文件了。
在asp.net2.0里提供了两种方式对数据库连接字符串加密,一种是使用asp_regii命令,一种是通过代码,下面显示的是通过代码方式对数据库连接字符串加密,代码如下:
configuration config = webconfigurationmanager.openwebconfiguration(request.applicationpath);
configurationsection configsection = config.getsection("connectionstrings");
if (configsection.sectioninformation.isprotected)
...{//如果已经加密,就不用再加密了
configsection.sectioninformation.unprotectsection();
config.save();
}
else
...{
configsection.sectioninformation.protectsection ("dataprotectionconfigurationprovider");
config.save();
}
这样,你检查该文件的配置可能如下:
<connectionstrings configprotectionprovider="dataprotectionconfigurationprovider">
<encrypteddata>
<cipherdata>
<ciphervalue>aqaaancmnd8bfderjhoawe/cl+sbaaaavclqg40bzkcjk40
adynn8gqaaaacaaaaaaadzgaaqaaaabaaaabihtow …pe
</cipherdata>
</encrypteddata>
</connectionstrings>
trackback: http://tb.blog.csdn.net/trackback.aspx?postid=1487303