Web.config文件配置详解
一.ASP.NET应用程序配置文件
<!--
说明:
1.所有的配置都必须被放在<configuration>和</configuration>标记之中.
2.<appSettings>和</appSettings>之间是自定义配置,通常用来自己设置一些常量,Add添加常量,Key是常量的名称,
value是常量的值.
<appSettings>
<add key="con" value="server=.;database=northwind;uid=sa;pwd=;"></add>
</appSettings>
在程序中可以用System.Configuration.ConfigurationSettings.AppSettings["con"]取值
SqlConnection con=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["con"]);
con.Open();
SqlCommand cmd=new SqlCommand("select * from employees",con);
this.DataGrid1.DataSource=cmd.ExecuteReader();
this.DataGrid1.DataBind();
3.<system.web>和</system.web>之间的标记是关于整个应用程序的设置.
如 <pages buffer="true"/> 使用页缓冲
4.<location>和</location>是一个区域标记.Path="aaa"表示下面的设置只对该文件有效.
-->
customErrors设置(在<system.web>和</system.web>之间)
语法
<customErrors
defaultRedirect="url"
mode="On|Off|RemoteOnly">
<error statusCode="statuscode" redirect="url"/>
</customErrors>
身份验证和授权
身份验证类型: WINDOWS 描述: WINDOWS 身份难作为默认的身份验证模式.用于任何形式的IIS身份验证
身份验证类型: FORMS 描述: 基于APS.NET窗体的身份验证作为默认的身份验证模式
身份验证类型: PASSPORT 描述:Microsoft Passport身份验证作为默认的身份验证模式
身份验证类型: NONE 描述: 没有身份验证.用于匿名用户和可以提供其自己的身份验证的应用程序.
<configuration>
<system.web>
<authentication mode="Windows|Forms|Passport|None">?
<forms name="name" loginUrl="url"
protection="All|NOne|Encryption"
timeout="xx" path="/">?
<credentials passwordFormat="Clear|SHA1|MD5">
<user name="用户名" password="密码"/>
</credentials>
</forms>?
<passport redirectUrl="internal"/>?
</authentication>
</system.web>
</configuration>
//基于forms先把IIS中该应用的匿名访问去掉
<forms>标记的属性
属性 选项 描述
name None 登录身份验证的Cookie名称
loginUrl None 登录页URL.如果没有身份验证Cookie,客户端将被重定向到此URL
protection ALL 应用程序同时使用数据验证和加密来保护Cookie
None 加密和验证都禁用
timeout 一段时间(按分钟计),这段时间之后身份验证Cookie将到期,默认值为30
path 由应用程序发布的Cookie的路径.默认值是反斜杠(/)
<authentication mode="Forms">
<forms name="YourCookieName" loginUrl="login.aspx" protection="ALL"></forms>
</authentication>
//授权
<authorization>
<allow users="?"/> //<allow users="*"/><!--允许所有用户 -->
<!--
<allow users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
<deny users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
-->
</authorization>
//login.aspx
登录代码
//连接数据库进行验证
if(true)//用户名是否合法
{
// System.Web.Security.FormsAuthentication.SetAuthCookie(this.TextBox1.Text,false);//指定的用户名写入到Cookie中(false临时Cookie,true永久Cookie)
// Response.Redirect("");
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text,false);//转到用户原访问的页
//如果为true,可用System..Web.Security.FormsAuthentication.SignOut();删除,以后又要求登录
}
else
{
Response.Write("用户不合法");
}
//如果用户少的话,可以不用数据库,直接允许/拒绝用户
<authentication mode="Forms"
<forms name="authCre" loginUrl="login.aspx" protection="ALL">
<credentials passwordFormat="Clear">
<user name="aaa" password="aaa"/>
<user name="bbb" password="bbb"/>
</credentials>
</forms>
</authentication>
登录代码
private void Button1_Click(object sender,System.EventArgs e)
{
if(System.Web.Security.FormsAuthentication.Authenticate(this.TextBox1.Text,This.TextBox2.Text)
{
// System.Web.Security.FormsAuthentication.SetAuthCookie(this.TextBox1.Text,true);//此方法需重定向
// Response.Redirect("WebForm1.aspx");
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text,false);//此方法不需要重定向,直接转到原访问页
}
else
{
Response.Write("用户不合法");
}
}
//授权时,通配符*表示任何人,?表示匿名
二.ASP.NET配置元素
由14.2.1节的介绍可以看出,ASP.NET应用程序配置文件Web.config中定义了很多配置元素处理程序声明和配置元素处理程序。本节主要介绍这些配置元素。
1.<configuration>
所有Web.config的根元素都是<configuration>标记,在它内部封装了其他所有配置元素。它的语法如下:
<configuration>
<!- configuration settings would go here. -->
</configuration>
2.<configSections>
该配置元素主要用于自定义的配置元素处理程序声明。所有的配置元素处理程序声明都在这部分。它由多个<section>构成。<section>主要有name和type两种属性。
— name:指定配置数据元素的名称。
— type:指定与name属性相关的配置处理程序类。
<configSections>节配置范例如下:
<configuration>
<configSections>
<section name="sessionState"
type="System.Web.SessionState.SessionStateSectionHandlers,
System.Web,Version=1.0.3300.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
/>
</configSections>
</configuration>
3.<appSettings>
在<appSettings>元素中可以定义自己需要的应用程序设置项,这充分反映了ASP.NET应用程序配置具有可扩展性的特点。
<appSettings>节语法如下:
<configuration>
<appSettings>
<add key="[key]" Value="[Value]" />
</appSettings>
</configuration>
它的<add>子标记主要有两种属性定义:Key和Value。
— Key:指定该设置项的关键字,便于在应用程序中引用;
— Value:指定该设置项的值。
下面给出一个范例:检索<appSettings>节中的设置。
第一步:在Web.config文件中配置<appSettings>节。
<configuration>
<appSettings>
<add key="appUser" Value="localhost" />
</appSettings>
</configuration>
第二步:在Web页面中检索<appSettings>节的设置。
<html>
<head></head>
<body>
<b>User Name:</b>
<%=ConfigurationSettings.appSettings("appUser") %><br>
</body>
</html>
在第二步中,用ConfigurationSettings.appSettings方法调用Web.config文件中的设置,输出结果为“localhost”。
该方法对访问<appSettings>元素中的应用程序设置非常方便,只需要提供检索的设置值对应的关键字即可,如上述代码。
4.<compilation>
该配置节位于<system.Web>标记中,用于定义使用哪种语言编译器来编译Web页面,以及编译页面时是否包含调试信息。它主要对以下4种属性进行设置。
— defaultLanguage:设置在默认情况下Web页面的脚本块中使用的语言。支持的语言有Visual Basic.Net,C#和Jscript。可以选择其中一种,也可以选择多种,方法是使用一个由分号分隔的语言名称列表,如Visual Basic.Net;C#。
— debug:设置编译后的Web页面是否包含调试信息。其值为true时将启用ASPX调试;为false时,不启用,但可以提高应用程序运行时的性能。
— explicit:是否启用Visual Basic显示编译选项功能。其值为true时启用,false时不启用。
— strict:是否启用Visual Basic限制编译选项功能。其值为true时启用,false时不启用。
<compilation>元素配置范例如下:
<configuration>
<system.web>
<compilation
defaultLanguage="c#"
debug="true"
explicit="true"
strict="true"
/>
</system.web>
</configuration>
在<compilation>元素中还可以添加<compiler>,<assemblies>,<namespaces>等子标记,它们的使用可以更好地完成编译方面的有关设置。这里就不再详述了。
5.<customErrors>
该配置元素用于完成两项工作:一是启用或禁止自定义错误;二是在指定的错误发生时,将用户重定向到某个URL。它主要包括以下两种属性。
— mode:具有On,Off,RemoteOnly 3种状态。On表示启用自定义错误;Off表示显示详细的ASP.NET错误信息;RemoteOnly表示给远程用户显示自定义错误。一般来说,出于安全方面的考虑,只需要给远程用户显示自定义错误,而不显示详细的调试错误信息,此时需要选择RemoteOnly状态。
— defaultRedirect:当发生错误时,用户被重定向到默认的URL。
另外,<customErrors>元素还包含一个子标记——<error>,用于为特定的HTTP状态码指定自定义错误页面。它具有以下两种属性。
— statusCode:自定义错误处理程序页面要捕获的HTTP错误状态码。
— redirect:指定的错误发生时,要重定向到URL。
<customErrors>元素配置范例如下:
<configuration>
<system.web>
<customErrors
mode=" RemoteOnly"
defaultRedirect="defaultError.aspx"
<error statusCode="400"
redirect=Errors400.aspx />
<error statusCode="401"
redirect=Errors401.aspx />
/>
</system.web>
</configuration>
6.<globalization>
该配置元素主要完成应用程序的全局配置。它主要包括以下3种属性。
— fileEncoding:用于定义编码类型,供分析ASPX,ASAX和ASMX文件时使用。它可以是下述任何编码类型。
(1)UTF-7:Unicode UTF-7字节编码技术。
(2)UTF-8:Unicode UTF-8字节编码技术,这也是最常用的基于Web的Unicode格式。
(3)UTF-16:Unicode UTF-16字节编码技术。
(4)ASCII:标准ASCII码。
— requestEncoding:指定ASP.NET处理的每个请求的编码类型,其可能的取值与fileEncoding特性相同。
— responseEncoding:指定ASP.NET处理的每个响应的编码类型,其可能的取值与fileEncoding特性相同。
<globalization>节配置范例如下:
<configuration>
<system.web>
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
/>
</system.web>
</configuration>
7.<sessionState>
该配置用于完成ASP.NET应用程序的会话状态设置。它主要有以下5种属性。
— mode:指定会话状态的存储位置。共有Off,Inproc,StateServer和SqlServer 4种状态。Off表示禁用会话状态;Inproc表示在本地保存会话状态;StateServer表示在远程状态服务器上保存会话状态;SqlServer表示在SQL Server中保存会话状态。
— stateConnectionString:用来指定远程存储会话状态的服务器名和端口号。在将模式mode设置为StateServer时,需要用到该属性。默认为本机。
— sqlConnectionString:指定保存状态的SQL Server的连接字符串。在将模式mode设置为SqlServer时,需要用到该属性。
— Cookieless:指定是否不使用客户端cookie保存会话状态。设置为true表示不使用;false为使用。
— timeout:用来定义会话空闲多少时间后将被中止。默认时间一般为20分钟。
<sessionState>节配置范例如下:
<configuration>
<system.web>
<sessionState
mode="SqlServer"
stateConnectionString="tcpip=127.0.0.1:8080"
sqlConnectionString="data source=127.0.0.1; user id=sa; password="
Cookieless="false"
Timeout="25"
/>
</system.web>
</configuration>
8.<trace>
该配置元素用来实现ASP.NET应用程序的跟踪服务,在程序测试过程中定位错误。其主要属性如下。
— enabled:指定是否启用应用程序跟踪功能。true为启用;false为禁用。
— requestLimit:指定保存在服务器上请求跟踪的个数。默认值为10。
— pageOutput:指定是否在每个页面的最后显示应用程序的跟踪信息。true为显示;false为不显示。
— traceMode:设置跟踪信息输出的排列次序。默认为SortByTime(时间排序),也可以定义为SortByCategory(字母排序)。
— localOnly:指定是否仅在Web服务器上显示跟踪查看器。true为仅在服务器控制台上显示跟踪查看器;false为在任何客户端上都显示跟踪输出信息,而不仅是在Web服务器上。
<trace>元素配置范例如下:
<configuration>
<system.web>
<trace
enabled="true"
requestLimit="20"
pageOutput="true"
traceMode="SortByTime"
localOnly="false"
/>
</system.web>
</configuration>
9.<authentication>
该配置元素主要进行安全配置工作。它最常用的属性是mode,用来控制ASP.NET Web应用程序的验证模式,可以设置为以下任一种值。
— Windows:用于将Windows指定为验证模式。
— Forms:采用基于ASP.NET表单的验证。
— Passport:采用微软的Passport验证。
— None:不采用任何验证方式。
另外,<authentication>元素还有一个子标记<forms>,使用该标记可以对cookie验证进行设置。它包含以下5种属性。
— name:用于验证的cookie名称。如果一台机器上有多个应用程序使用窗体验证,每个应用程序的cookie名称必须不同。
— loginUrl:未通过cookie验证时,将用户重定向到URL。
— protection:指定cookie的数据保护方式。它有All,None,Encryption和Validation共4个值。其中,All(默认值)表示对cookie进行加密和数据验证;None表示不保护cookie,这种网站只将cookie用于个性化,安全要求较低;Encryption表示对cookie进行加密,不进行数据保护;Validation表示对cookie验证数据,不进行加密。
— timeout:指定cookie失效的时间,超时后将需要重新进行登录验证获得新的cookie。单位为分钟。
— path:指定Web应用程序创建的cookie的有效的虚拟路径。
<authentication>元素范例如下:
<configuration>
<system.web>
<authentication mode="Forms" >
<forms name=".FormsAuthCookie"
loginUrl="login.aspx"
protection="All"
timeout="10"
path="pathForCookie"
/>
/>
</system.web>
</configuration>
在实际应用中,ASP.NET应用程序的安全配置使用非常广泛,且很有用。
三.自定义应用程序设置的配置和检索
前面介绍ASP.NET应用程序配置系统的优点时,曾指出该配置系统是可扩展的。用户不仅可以使用系统预定义的元素,还可以在Web.config文件中添加自定义标记,创建自己的配置处理程序和设置。
1.<appSettings>
Web.config文件中有一个可选标记<appSettings>,专门用于存放应用程序设置。该应用程序的任何页面都可以访问到该Web.config文件中的应用程序设置。如果要修改设置,只要在配置文件中进行修改就行,无须逐个修改应用程序的每个页面。
下面请看一个简单的例子,以加深对Web.config文件中扩展应用程序配置信息的理解。
<configuration>
<appSettings>
<add key="MySettings" value="扩展应用程序配置信息" />
</appSettings>
</configuration>
在上面的Web.config文件中,设置了一个字符串,关键字为MySettings,键值为“扩展应用程序配置信息”。
在.NET类库中有一个System.Configuration.ConfigurationSettings类,利用它可以检索任意配置节的数据信息。ConfigurationSettings类有一个AppSettings属性,利用该属性可以检索<appSettings>节的信息,方法如下:
string sqlconn=ConfigurationSettings.AppSettings["MySettings"];
2.自定义标记
在Web.config文件中并不限于通过预定义的标记<appsettings>来保存配置信息,Web.config的格式也允许用户添加新的自定义标记。在该标记内,可定义新的配置信息。
下面请看实例,创建一个节存储数据库连接字符串。
<configuration>
<configSections>
<section name="OwnSettings"
type="System.Configuration.NamueFileSectionHandler,
System.Web,Version=1.0.3300.0,Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
</configSections>
<OwnSettings>
<add key="constring" Value="访问自定义的配置信息"/>
</OwnSettings>
</configuration>
上述代码的配置过程可以分为两步。
第一步:在<configSections>中,声明了一个新的自定义配置元素处理程序,即声明自定义标记的名称(<OwnSettings>)和类型(System.Configuration.NamueFileSection Handler)。注意,由于自定义标记并不是machine.config文件设定的默认配置,所以需要定义该标记的类型(在自定义标记内,可以使用任何System.Configuration类支持的类型)。
第二步:在<configSections>域之后,为声明的标记(<OwnSettings>)做实际的应用程序配置。
可以使用ConfigurationSettings.GetConfig()方法访问自定义标记。该方法接受自定义标记名称(<OwnSettings>)作为参数,键的名称("constring")作为标记的属性,方法如下:
string myConn= (string)ConfigurationSettings.GetConfig ("OwnSettings") ["constring"];