可以存储网站配置信息, 数据库连接字符串等。
支持层次结构的多级配置文件,即存在于各个子目录中,使用时优先使用最底层的配置。
| 位置 | 描述 |
|---|---|
| %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").ConnectionStringconnectionString = 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;}
