Web.config 配置文件 web.config 文件

可以存储网站配置信息, 数据库连接字符串等。
支持层次结构的多级配置文件,即存在于各个子目录中,使用时优先使用最底层的配置。

位置 描述
%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 文件示例:

  1. <RewriterConfig>
  2. <Rules>
  3. <RewriterRule>
  4. <LookFor>~/BoardList_([0-9]*)\.aspx</LookFor>
  5. <SendTo>~/Board.aspx?BoardID=$1</SendTo>
  6. </RewriterRule>
  7. <RewriterRule>
  8. <LookFor>~/BoardList_([0-9]*)_([0-9]*)\.aspx</LookFor>
  9. <SendTo>~/Board.aspx?BoardID=$1&amp;Page=$2</SendTo>
  10. </RewriterRule>
  11. <RewriterRule>
  12. <LookFor>~/TopicList_([0-9]*)_([0-9]*)\.aspx</LookFor>
  13. <SendTo>~/Topic.aspx?BoardID=$1&amp;TopicID=$2</SendTo>
  14. </RewriterRule>
  15. <RewriterRule>
  16. <LookFor>~/TopicList_([0-9]*)_([0-9]*)_([0-9]*)\.aspx</LookFor>
  17. <SendTo>~/Topic.aspx?BoardID=$1&amp;TopicID=$2&amp;Page=$3</SendTo>
  18. </RewriterRule>
  19. </Rules>
  20. </RewriterConfig>

configSections 配置

在配置文件中添加新的配置节,并用新的方法访问。

配置自定义节:”AppConfig”

用来演示的程序名为MyApp,Namespace也是MyApp

  1. <configSections>
  2. <section name="AppConfig" type="MyApp.AppConfig, MyApp" />
  3. </configSections>

添加自定义节:”AppConfig”

  1. <AppConfig>
  2. <add key="ConnectionString" value="this is a ConnectionString" />
  3. <add key="UserCount" value="199" />
  4. </AppConfig>

在派生类添加方法

我们把所有的配置都映射成相应的静态成员变量,并且是写成只读属性,这样程序通过
类似AppConfig.ConnectionString就可以访问,配置文件中的项目了

  1. using System.Collections.Specialized;
  2. using System.Xml;
  3. public class AppConfig : IConfigurationSectionHandler
  4. {
  5. static String m_connectionString = String.Empty;
  6. static Int32 m_userCount = 0;
  7. public static String ConnectionString
  8. {
  9. get
  10. {
  11. return m_connectionString;
  12. }
  13. }
  14. public static Int32 UserCount
  15. {
  16. get
  17. {
  18. return m_userCount;
  19. }
  20. }
  21. static String ReadSetting(NameValueCollection nvc, String key, String defaultValue)
  22. {
  23. String theValue = nvc[key];
  24. if(theValue == String.Empty)
  25. return defaultValue;
  26. return theValue;
  27. }
  28. public object Create(object parent, object configContext, XmlNode section)
  29. {
  30. NameValueCollection settings;
  31. try
  32. {
  33. NameValueSectionHandler baseHandler = new NameValueSectionHandler();
  34. settings = (NameValueCollection)baseHandler.Create(parent, configContext, section);
  35. }
  36. catch
  37. {
  38. settings = null;
  39. }
  40. if ( settings != null )
  41. {
  42. m_connectionString = AppConfig.ReadSetting(settings, "ConnectionString", String.Empty);
  43. m_userCount = Convert.ToInt32(AppConfig.ReadSetting(settings, "UserCount", "0"));
  44. }
  45. return settings;
  46. }
  47. }

设置启动

在Global.asax.cs中的Application_Start中添加以下代码
这样在程序启动后,会读取AppConfig这个Section中的值,系统会调用你自己实现的IConfigurationSectionHandler接口来读取配置

  1. System.Configuration.ConfigurationSettings.GetConfig("AppConfig");

connectionStrings 配置

存储数据库连接字符串,连接串总数包含各个层次的集合。

目的 读取方式
取连接串总数 ConfigurationManager.ConnectionStrings.Count
取连接串 ConfigurationManager.ConnectionStrings[“DataBase”].ConnectionString
取服务提供者 ConfigurationManager.ConnectionStrings[“DataBase”].ProviderName

内容示例:

  1. <connectionStrings>
  2. <add name="DataBase" connectionString="App_Data/GoagoForums.mdb" providerName="System.Data.OleDb"/>
  3. </connectionStrings>

appSettings 配置

存储字符串。

目的 读取方式
取字符串总数 ConfigurationManager.appSettings.Count
取字符串 ConfigurationManager.appSettings [“TableMaxCount”]

内容示例:

  1. <appSettings>
  2. <add key="TableMaxCount" value="200000"/>
  3. <add key="BbsType" value="normal"/>
  4. </appSettings>

Web.config 文件示例:

  1. <?xml version="1.0"?>
  2. <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  3. <appSettings>
  4. <add key="connstr" value="localhost\sqlexpress" />
  5. </appSettings>
  6. <connectionStrings>
  7. <add name="LocalSqlPubs" connectionString="Server=(local);Integrated Security=True;Database=Pubs" providerName="System.Data.SqlClient" />
  8. </connectionStrings>
  9. <configuration>

读取配置的代码:

  1. // 读取代码 (VB)
  2. Dim connectionString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LocalSqlPubs").ConnectionString
  3. connectionString = System.Configuration.ConfigurationManager.AppSettings("connstr")
  4. // 读取代码 (C#)
  5. string abc = System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
  6. abc = System.Configuration.ConfigurationManager.AppSettings["connstr"];

数据库连接代码:

  1. // 获得数据提供者工厂
  2. public static DbProviderFactory GetFactory()
  3. {
  4. return DbProviderFactories.GetFactory(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlPubs"].ProviderName);
  5. }
  6. // 获得数据库连接对象
  7. public static DbConnection GetConnection()
  8. {
  9. DbConnection cn = GetFactory().CreateConnection();
  10. cn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlPubs"].ConnectionString;
  11. cn.Open();
  12. return cn;
  13. }