在ASP.NET中,这些设置被迁移到网站根目录下的一个XML格式的文件中(Web.config)。通过Web.config,你可为网站定义诸如自定义的404报错页、(身份)验证和授权等设置;如果允许跟踪,还可为ASP.NET的网页设置编译选项。 Web.config文件是一个XML格式的文件。在根层是 <configuration> 的标记。在这个标记内,你可以添加许多其他的标记,在你要定义的大部分的网站配置参数的地方,最常用,也是最有用的一个是 system.web 标记。另外,为定义 application-wide 的设置,你要使用 <appSettings> 标记。在这个标记中,你可用 <add ... /> 标记定义0到多个设置。例如:如果我们希望增加一个数据库连接串参数,我们可以用如下的 Web.config 文件: <configuration> <!-- application specific settings --> <appSettings> <add key="connString" value="connection string" /> </appSettings> <system.web> ... </system.web> </configuration> 如上的代码添加了一个名为connString 的 application-wide 设置,由connection string提供数据连接串的值。现在,你可以在这个网站的大部分ASP.NET网页中,用下面的语句读取 connString 这个参数的值: ConfigurationSettings.AppSettings("connString") 定义Application-Wide 类的设置 如果你正在创建一个大型ASP.NET应用,比较明智的决定是将大量的网站全局管理、调整属性定义为 application-wide 参数。到目前为止,你可以象刚才我们所作的那样使用 appSettings 标记。但如果你想卖出你的网络应用程序,或者使其被别人的网站所调用,在appSettings 标记中放置这样的一些参数,可能会导致一些问题。举个例子:设想你把一个你希望可配置的数据库连接串命名为 connString ,正如我们在前面所作的一样,于是你在 appSettings 标记中创建一个键(key)命名为 connString 。将要安装你的应用程序的人,正在试图使其整合到他原来的网站。它也许已经存在这样的配置,这就意味着他不得不修改这个设置和所有引用它的页面,使得这些命名不会与你设置中的命名冲突。 你当然不愿让你的最终用户陷入这种头痛的境地。为了避免这种混乱,你可以在Web.config 文件中,把你应用程序的设置“分组”为一个唯一的标记。也就是说你可以在Web.config 文件中创建一个名为 <MyAppSettings> 的标记,然后再象我们前面所述那样简单地添加application-wide 的设置。为了在 Web.config 中自定义一个标记,你必须先通过 <configuration> 标记,在Web.config 中明确的定义一个新的标记名称,例如: <configuration> <configSections> <section name="MyAppSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> ... </configuration> 注意: 在 <section ... /> 标记中的type属性值都必须写在同一行中,在这里我们换行是为了看起来更清晰。 这个 <section ... /> 标记指明我们将添加一个自定义的名为 MyAppSettings 的标记。从现在开始,为了添加application-wide 参数,我们能在Web.config 文件中添加一个 <MyAppSettings> 标记和 <add ... /> 标记,如下所示: <configuration> <configSections> <section name="MyAppSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <MyAppSettings> <add key="connString" value="connection string" /> </MyAppSettings> ... </configuration> 最后,为了在ASP.NET 的网页中,读取这个自定义的值,我们用如下的语法: ConfigurationSettings.GetConfig("MyAppSettings")("connString") 更一般的做法是:把 MyAppSettings 替换为你选择用来存放自定义设置标记的名称;同时把 connString 替换为在自定义设置标记中,你希望读取的参数名称。通过这种方法,当发售你的ASP.NET网页应用程序时,安装他的人就不必陷入一些命名冲突之中(当然,除非他们也已经创建了一个和你所命名的完全相同的自定义设置)。 配置文件的规则 ASP.NET的配置文件是基于XML格式的纯文本文件,存在于应用的各个目录下,统一命名为“config.web”。它决定了所在目录及其子目录的配置信息,并且子目录下的配置信息覆盖其父目录的配置。 WINNT\Microsoft.NET\Framework\版本号\下的config.web为整个机器的根配置文件,它定义了整个环境下的缺省配置。 缺省情况下,浏览器是不能够直接访问目录下的config.web文件。 在运行状态下,ASP.NET会根据远程URL请求,把访问路径下的各个config.web配置文件叠加,产生一个唯一的配置集合。举例来说,一个对URL: http://localhost/webapp/owndir/test.aspx的访问,ASP.NET会根据以下顺序来决定最终的配置情况: 1..\Microsoft.NET\Framework\v.1.00\config.web (缺省配置文件) 2..\webapp\config.web (应用的配置) 3..\webapp\owndir\config.web (自己的配置) 配置文件的语法规则 1)标识 配置内容被置于config.web文件中的标记<configuration>和</configuration>之间。 格式: <configuration> 配置内容 … </configuration> 2)配置段句柄说明 ASP.NET的配置文件架构并未指定任何文件格式或者是支持的配置属性。相反的,它提出了“配置段句柄申明”的概念来支持任意的用户定义配置段。 格式: <configsections> <add name=欲定义配置段名 type=处理的句柄函数 /> </configsections> 3)配置段 具体定义配置的内容,供应用使用。 以下例子定义了一个“httpmodules”配置段,设置了系统http相关的处理模块 <configuration> <configsections> <add name="httpmodules" type="System.Web.Configuration.HttpModules ConfigurationHandler" /> </configsections> <httpmodules> <add type="System.Web.SessionState.CookielessSessionModule" /> <add type="System.Web.Caching.OutputCacheModule" /> <add type="System.Web.SessionState.SessionStateModule" /> <add type="System.Web.Security.WindowsAuthenticationModule" /> <add type="System.Web.Security.CookieAuthenticationModule" /> <add type="System.Web.Security.PassportAuthenticationModule" /> <add type="System.Web.Security.CustomAuthenticationModule" /> <add type="System.Web.Security.UrlAuthorizationModule" /> <add type="System.Web.Security.FileAuthorizationModule" /> </httpmodules> </configuration> 4.2. 4ASP.NET定义的标准配置段 1)httpmodule 段: 定义了应用的http请求的处理模块以及诸如安全、日志之类的应用方式 2)httphandlers 段: 负责映射URLs到IhttpHandler类 3)sessionstat 段: 负责配置http模块的会话状态 4)globalization 段: 配置应用的公用设置 5)compilation 段: 配置ASP.NET的编译环境 6)trace 段: 配置ASP.NET的跟踪服务 7)security 段: ASP.NET的安全配置 8)iisprocessmodel 段: 在IIS上配置ASP.NET的处理模式 9)browercaps 段: 配置浏览器的兼容部件 4.2. 5一个配置读出的例子 1)config.web配置文件 <!--config.web 请放入FormCfg.aspx所在目录--> <configuration> <!--申明一个test配置段--> <configsections> <add name="test" type="System.Web.Configuration.DictionarySectionHandler" /> </configsections> <test> <!--配置一个键key,其内容为just a configure test--> <add key="key" value="just a configure test" /> </test> </configuration> 2)读出其内容 <!--文件名:Application/FormCfg.aspx--> <html> <head> <script language="VB" runat=server> sub page_load(s as object ,e as eventargs) '取出test配置段的key键的值 Dim CfgSection As Hashtable = Context.GetConfig("test") Dim Msg As String = CStr(CfgSection("key")) lblMsg.text=Msg end sub </script> <title> 配置信息的读取 </title> </head> <body> <center> config.web中"test"配置段中key的内容为: <asp:label id=lblmsg runat=server /> </center> </body> </html> 3)运行结果 4.2. 6Config.web配置实例 <configuration> <!--定义用户应用的公用设置,如SQL的sql连接串等等--> <appsettings> </appsettings> <!--设置浏览器的兼容性部件--> <browsercaps> </browsercaps> <!--编译环境设置,非调试模式--> <compilation debugmode="false"> <!--缺省编译语言为vb,以后可以不再在Page中定义脚本语言--> <compilers defaultlanguage="vb"> <!--以MSVSA.dll编译.vb为后缀的VB文件--> <compiler language="VB" extension=".vb" type="MSVSA.dll#Microsoft.VB.Compiler"/> </compilers> <assemblies> <!--加入对System.Data的引用--> <add assembly="System.Data" /> <!--去掉对System.Data的引用--> <remove assembly="System.IO" /> <!--去掉config.web中包含或继承来的引用--> <clear /> </assemblies> </compilation> <!--设置应用全局环境--> <!--文件、请求、返回以gb2312编码,以保证浏览器正确显示中文--> <globalization fileencoding="gb2312" requestencoding="gb2312" responseencoding="gb2312"/> <!--定义用户出错的处理--> <!--出错缺省显示defaultredirect指定的页面,mode为on时,遵循customerrors配置段--> <!--mode为off时,忽略用户出错,mode为remoteonly时,本地才显示真正的出错原因--> <customerrors defaultredirect="AnErrorHasOccured.aspx?ErrNum=-1" mode="remote"> <!--当出错码为500时,显示redirect指定的页面--> <error statuscode="500" redirect="AnErrorHasOccured.aspx?ErrNum=500"/> </customerrors> <!--指定目录webapp的访问权限--> <location path="webapp” > <!--非授权用户不能进入webapp目录--> <security> <authorization> <deny users="?" /> </authorization> </security> </location> <!--定义安全属性--> <security> <authorization> <!--角色为Adminstrators和所有的用户访问其指定的资源--> <allow roles="Adminstrators"/> <allow users="*" /> </authorization> </security> </configuration>

评论