web.config是ASP.NET中保存配置信息(比如数据库连接字符串等)的重要文件。它是基于xml的文本文件方式放在Web应用程序的任何目录中,并且默认不随源文件编译到Dll中,而运行环境随时监视着它是否有改变,一但有变动,系统会自动重新加载里面的最新内容。
一、 配置文件保存位置
.net的默认配置文件保存在"windows目录\Microsoft.NET\Framework\对应.net版本\config"文件夹下面。不同的操作系统windows目录不一样,我们在命令行下输入"echo %windir%"查看windows目录所在的位置。
图:web.config所在的目录
Asp.net中有两个非常重要的配置文件,分别是machine.config和web.config,它们都位于config文件夹下面。这两个文件一般不需要我们手工是维护它,保持默认即可。但针对asp.net应用程序,它自身会有0个,1个或者多个web.config配置文件,多个配置文件会存在加载顺序问题。下节会介绍。
注意,传说中.net3.0和.net3.5只是在.net2.0的基础上扩充中,所以还是没用的.net2.0的配置文件。它们连config这个目录都没有。
二、 配置文件加载顺序
iis在Asp.net网站启动时,会加载配置文件中的配置信息,然后缓存这些信息,不会每次要用都去读取配置文件,只是IIS会随时监视着这些文件的变化,一量有变化,它会重新去读取并缓存配置信息。
Asp.net网站运行时会按照以下方式加载配置文件中的节点信息:
1) 如果在当前运行页面所在的目录下有web.config文件,则查找是否存在所需要的节点,如果存在则返回结果,并停止下一步地查找。
2) 如里所在目录不存在web.config配置或者配置文件里没有所需要的节点,则查找它所在的上一级目录的配置文件中的节点,直到网站根目录。(问题:IIS6中的虚拟目录算不算根目录)
3) 如果网站根目录中都不存在web.config或者所需要的配置节点,转而到"windows目录\Microsoft.NET\Framework\对应.net版本\config\web.config"中去查找。
4) 如果第3条中还没找到,继续到"windows目录\Microsoft.NET\Framework\对应.net版本\config\machine.config"中去查找。
5) 如果还没找到,那就报错吧。
存在两个问题
1) IIS6中的虚拟目录算不算根目录。
2) 在系统运行时,在一个原本没有web.config的目录中手工加上一个web.config,会不会自动加载。
三、 配置文件节点介绍
Web.config文件是一个xml文本文件,它的根节点为<configuration>,该节点下包含常见的子节点有:<configSections>、<appSettings>、<connectionStrings>(保存数据库连接字符串)、<location>和<system.web>。下面针对各节点配置进行介绍。
1. <configSections>
configSections 元素指定了配置节和处理程序声明。由于 ASP.NET 不对如何处理配置文件内的设置作任何假设,因此这非常必要。但 ASP.NET 会将配置数据的处理委托给配置节处理程序。配置结构信息如下:
<configSections>
<!--定义配置节处理程序与配置元素之间的关联。-->
<section />
<!--定义配置节处理程序与配置节之间的关联。-->
<sectionGroup />
<!--移除对继承的节和节组的引用。-->
<remove />
<!--移除对继承的节和节组的所有引用,只允许由当前 section 和 sectionGroup 元素添加的节和节组。-->
<clear/>
</configSections>
每个 section 元素标识一个配置节或元素以及对该配置节或元素进行处理的关联 ConfigurationSection 派生类。可以在 sectionGroup 元素中对 section 元素进行逻辑分组,以对 section 元素进行组织并避免命名冲突。section 和 sectionGroup 元素包含在 configSections 元素中。
如果配置文件中包含 configSections 元素,则 configSections 元素必须是 configuration 元素的第一个子元素。
下面我们来示例写一个自定义配置信息,并完成它的SectionHandler,首先我们在<configuration>节点下添加configSections。
<configuration>
<configSections>
<sectionGroup name="mySectionGroup">
<section name="mySection" requirePermission="true"
type="ConfigTest.SectionHandler.MySectionHandler,ConfigTest.SectionHandler" />
</sectionGroup>
</configSections>
<mySectionGroup>
<mySection>
<add key="key1" value="value1" />
<add key="key2" value="value2" />
<add key="key3" value="value3" />
<add key="key4" value="value4" />
<add key="key5" value="value5" />
</mySection>
</mySectionGroup>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</configuration>
编写自定义SectionHandler,我们为MySectionHandler返回一个Hashtable的数据。
namespace ConfigTest.SectionHandler
{
public class MySectionHandler : IConfigurationSectionHandler
{
public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
Hashtable ht = new Hashtable();
foreach (XmlNode node in section.ChildNodes)
{
if (node.Name == "add")
{
ht.Add(node.Attributes["key"].Value, node.Attributes["value"].Value);
}
}
return ht;
}
}
}
在页面中使用该Section,由ConfigurationManager.GetSection得到SectionHandler返回的Hashtable。注意参数结构。
protected void Page_Load(object sender, EventArgs e)
{
Hashtable ht = ConfigurationManager.GetSection("mySectionGroup/mySection") as Hashtable;
foreach (DictionaryEntry de in ht)
{
Response.Write(de.Key + " - " + de.Value + "<br>");
}
}
2. <appSettings>
该节点下主要用来存储asp.net应用程序的一些配置信息,也可以把数据库连接字符串也放在这里,不过.net2.0提供了connectionStrings节点,所以数据库连接字符串还是不建议放在这里,下面为一个图片类型的实例。
<appSettings>
<!--图片类型扩展名-->
<add key="ImgType" value=".bmp;.jpg;.gif;.png"/>
</appSettings>
调用方法为:
string ImgType = ConfigurationManager.AppSettings["ImgType"];
3. <connectionStrings>
connectionStrings和appSettings类似,不过用于保存配置数据库连接信息,下面给一个实例。
<connectionStrings>
<add name="SqlserverConnStr" connectionString="Data Source=Aron1;Initial Catalog= pubs;UserId=sa;Password=asdasd;"/>
<add name="OrcleConnStr" connectionString="Provider=msdaora;Data Source= MyoracleDB;UserId=UserName;Password=asdasd;"/>
</connectionStrings>
调用方式为:
string connStr = ConfigurationManager.ConnectionStrings["SqlserverConnStr"].ConnectionString;
4. <system.web>
<system.web>为.net应用程序的行为方式配置节点,该节点包含很多子节点,很多子节点已经由.net配置好了,这里我们只来看看一些重要的配置节点。
? <customErrors>
<customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
其中mode属性有三种值,On/Off/RemoteOnly,默认为Rem
关键词标签:Asp.net
相关阅读
热门文章 手把手教你用好LINQ to SQL在.NET环境下为网站增加IP过滤功能ASP.NET 如何避免页面重新整理时重复送出用Asp.net扩展ExtJS
人气排行 asp.net表单提交方法GET\POST在ASP.NET中如何判断用户IE浏览器的版本Asp.net中messagebox的实现方法Asp.net中的web.config配置在ASP.NET MVC中实现大文件异步上传用Iformattable接口控制.Net中文本格式c#.Net经典面试题目用Asp.net扩展ExtJS
查看所有0条评论>>