可以存储网站配置信息, 数据库连接字符串等。
支持层次结构的多级配置文件,即存在于各个子目录中,使用时优先使用最底层的配置。
位置 | 描述 |
---|---|
%windir%\Microsoft.NET\Framework\vx.x.xxxx\CONFIG\machine.config | 顶级 |
IIS 网站目录\Web.config | 一级 |
IIS 网站目录\虚拟目录\Web.config | 二级 |
IIS 网站目录\虚拟目录\子目录\Web.config | …级 |
各个节的功能
节 | 描述 |
---|---|
ASP.NET 身份验证支持, 应用程序级 | |
控制 URL 资源的客户访问, 任何级 | |
编译设置, 默认的 debug 属性是 true | |
提供有关自定义错误的信息 | |
HTTP 运行库设置 | |
标识特定于页的配置设置 | |
为当前应用程序配置会话状态设置 | |
配置 ASP.NET 跟踪服务 | |
[RewriterConfig](https://www.tcoline.com/resource/asp.net/config/config/RewriterConfig.htm) | 网址重写服务 |
[configSections](https://www.tcoline.com/resource/asp.net/config/config/configSections.htm) | 自定义配置节 |
[connectionStrings](https://www.tcoline.com/resource/asp.net/config/config/connectionStrings.htm) | 数据库连接配置 |
[appSettings](https://www.tcoline.com/resource/asp.net/config/config/AppSettings.htm) | 字符串配置 |
属性 | 描述 |
---|---|
connectionStrings | ConnectionStringSettings 集合对象 |
connectionStrings.Count | ConnectionStringSettings 集合数量 |
connectionStrings(“name”).ConnectionString | 返回 name=”name” 的 connectionString 属性值 |
RewriterConfig 配置
可以用于网址重建, 隐藏真实的网页信息。
浏览器网址 | 真实网址 |
---|---|
http://localhost/go/BoardList_1_2.aspx | http://localhost/go/Board.aspx?BoardId=1&Page=2 |
Web.config 文件示例:
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/BoardList_([0-9]*)\.aspx</LookFor>
<SendTo>~/Board.aspx?BoardID=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/BoardList_([0-9]*)_([0-9]*)\.aspx</LookFor>
<SendTo>~/Board.aspx?BoardID=$1&Page=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/TopicList_([0-9]*)_([0-9]*)\.aspx</LookFor>
<SendTo>~/Topic.aspx?BoardID=$1&TopicID=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/TopicList_([0-9]*)_([0-9]*)_([0-9]*)\.aspx</LookFor>
<SendTo>~/Topic.aspx?BoardID=$1&TopicID=$2&Page=$3</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
configSections 配置
配置自定义节:”AppConfig”
用来演示的程序名为MyApp,Namespace也是MyApp
<configSections>
<section name="AppConfig" type="MyApp.AppConfig, MyApp" />
</configSections>
添加自定义节:”AppConfig”
<AppConfig>
<add key="ConnectionString" value="this is a ConnectionString" />
<add key="UserCount" value="199" />
</AppConfig>
在派生类添加方法
我们把所有的配置都映射成相应的静态成员变量,并且是写成只读属性,这样程序通过
类似AppConfig.ConnectionString就可以访问,配置文件中的项目了
using System.Collections.Specialized;
using System.Xml;
public class AppConfig : IConfigurationSectionHandler
{
static String m_connectionString = String.Empty;
static Int32 m_userCount = 0;
public static String ConnectionString
{
get
{
return m_connectionString;
}
}
public static Int32 UserCount
{
get
{
return m_userCount;
}
}
static String ReadSetting(NameValueCollection nvc, String key, String defaultValue)
{
String theValue = nvc[key];
if(theValue == String.Empty)
return defaultValue;
return theValue;
}
public object Create(object parent, object configContext, XmlNode section)
{
NameValueCollection settings;
try
{
NameValueSectionHandler baseHandler = new NameValueSectionHandler();
settings = (NameValueCollection)baseHandler.Create(parent, configContext, section);
}
catch
{
settings = null;
}
if ( settings != null )
{
m_connectionString = AppConfig.ReadSetting(settings, "ConnectionString", String.Empty);
m_userCount = Convert.ToInt32(AppConfig.ReadSetting(settings, "UserCount", "0"));
}
return settings;
}
}
设置启动
在Global.asax.cs中的Application_Start中添加以下代码
这样在程序启动后,会读取AppConfig这个Section中的值,系统会调用你自己实现的IConfigurationSectionHandler接口来读取配置
System.Configuration.ConfigurationSettings.GetConfig("AppConfig");
connectionStrings 配置
存储数据库连接字符串,连接串总数包含各个层次的集合。
目的 | 读取方式 |
---|---|
取连接串总数 | ConfigurationManager.ConnectionStrings.Count |
取连接串 | ConfigurationManager.ConnectionStrings[“DataBase”].ConnectionString |
取服务提供者 | ConfigurationManager.ConnectionStrings[“DataBase”].ProviderName |
内容示例:
<connectionStrings>
<add name="DataBase" connectionString="App_Data/GoagoForums.mdb" providerName="System.Data.OleDb"/>
</connectionStrings>
appSettings 配置
存储字符串。
目的 | 读取方式 |
---|---|
取字符串总数 | ConfigurationManager.appSettings.Count |
取字符串 | ConfigurationManager.appSettings [“TableMaxCount”] |
内容示例:
<appSettings>
<add key="TableMaxCount" value="200000"/>
<add key="BbsType" value="normal"/>
</appSettings>
Web.config 文件示例:
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings>
<add key="connstr" value="localhost\sqlexpress" />
</appSettings>
<connectionStrings>
<add name="LocalSqlPubs" connectionString="Server=(local);Integrated Security=True;Database=Pubs" providerName="System.Data.SqlClient" />
</connectionStrings>
<configuration>
读取配置的代码:
// 读取代码 (VB)
Dim connectionString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LocalSqlPubs").ConnectionString
connectionString = System.Configuration.ConfigurationManager.AppSettings("connstr")
// 读取代码 (C#)
string abc = System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
abc = System.Configuration.ConfigurationManager.AppSettings["connstr"];
数据库连接代码:
// 获得数据提供者工厂
public static DbProviderFactory GetFactory()
{
return DbProviderFactories.GetFactory(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlPubs"].ProviderName);
}
// 获得数据库连接对象
public static DbConnection GetConnection()
{
DbConnection cn = GetFactory().CreateConnection();
cn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlPubs"].ConnectionString;
cn.Open();
return cn;
}