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. }