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"];

posted @ 2013-03-04 10:39  yuchao.xia  阅读(856)  评论(0编辑  收藏  举报