一、配置文件入门

  .Net提供了一种保存项目配置信息的办法,就是利用配置文件,配置文件的后缀一般是.config。在WinForm程序中配置文件一般是App.config。在Asp.net中一般默认是web.config。

  一个.config配置文件都是基于XML的文本文件,并且可以保存到Web应用程序中的任何目录中。在发布Web应用程序时web.config文件并不编译进dll文件中。将来如果客户端发生了变化,仅仅需要使用记事本打开Web.config文本编辑相关的设置就可以重新正常使用,而无需重新编译程序。

  1.配置文件的查找
  我们先从配置文件的查找方式来了解配置文件。
  .net提供了一个针对当前机器的配置文件,这个文件是machine.config,它位于%windir%Microsoft.NETFrameworkv2.0.50727CONFIG文件下。
(%windir%是系统分区下的系统目录,在命令行模式下输入%windir%然后回车就能查看当前机器的系统目录,在Windows 2003以及Window XP中%windir%是系统分区下的windows目录,在Windows 2000中%windir%是系统分区下的WinNT目录)。这个文件里面定义了针对当前及其的WinForm程序和Asp.net应用程序的配置。

  machine.config在我的电脑的路径是:C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config  由于里面的内容比较多,而且看不懂,所以贴出来也没有什么用了。

  在同样的文件夹下还有一个web.config文件,这个文件包含了Asp.net网站的常用配置。Asp.net网站IIS启动的时候会加载配置文件中的配置信息,然后缓存这些信息,这样就不必每次去读取配置信息。在运行过程中asp.net应用程序会监视配置文件的变化情况,一旦编辑了这些配置信息,就会重新读取这些配置信息并缓存。

  当我们要读取某个节点或者节点组信息时,是按照以下方式搜索的:
  (1)、如果在当前页面所在的目录下存在web.config文件,查看是否存在所要查找的节点名称,如果存在返回结果并停止查找。
  (2)、如果当前页面所在目录下不存在web.config文件或者web.config文件中不存在该节点名,则查找它的上级目录,直到网站的根目录。
  (3)、如果网站根目录下不存在web.config文件或者web.config文件中不存在该节点名则在                             C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\webconfig.config文件中查找。
  (4)如果在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\webconfig.config文件中不存在响应的节点则在      C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config中查找。
  (5)如果仍然没有找到则返回null。

当前页面所在目录的web.config -> 上级目录直至根目录的web.config -> C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\webconfig.config -> C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

  所以如果我们对某个网站或者某个文件夹有特定要求的配置,可以在相应的文件夹下创建一个web.config文件,覆盖掉上级文件夹中的web.config文件中的同名配置即可。这些配置信息的寻找只查找一次,所以便缓存起来供后来的调用。在asp.net应用程序运行过程中,如果web.config文件发生更改就会导致相应的应用程序重新启动,这时存储在服务器内存中的用户会话信息就会丢失(如存储在内存中的Session)。一些软件(杀毒软件)每次完成对web.config的访问时就会修改web.config的访问时间属性,也会导致asp.net应用程序的重启。

  2、常见的配置节点及读取

  web.config文件是一个XML文件,它的根节点是<configuration>,在<configuration>节点下的常见子节点有:<configSections>、<appSettings>、<connectionStrings>和<system.web>。其中<appSettings>节点主要用于配置一些网站的应用配置信息,而<connectionStrings>节点主要用于配置网站的数据库连接字符串信息。

<system.web>节点主要是网站运行时的一些配置,它的常见节点有下面这些:
<appSettings>节点
  <appSettings>节点主要用来存储Asp.net应用程序的一些配置信息,比如上传文件的保存路径等。

<appSettings>
<!-- 允许上传的图片格式类型 -->
<add key="ImageType" value=".jpg;.bmp;.gif;.png;.jpeg">
<!-- 允许上传的文件类型 -->
<add key="FileType" value=".jpg;.bmp;.gif;.png;.jpeg;.pdf;.zip;.rar;.xls;.doc"/>
</appSettings>

<connectionStrings>节点
  <connectionStrings>节点主要用于配置数据库连接的,我们可以在<connectionStrings>节点中增加任意个节点来保存数据库连接字符串,以后再代码中通过代码的方法动态获取节点的值来实例化数据库连接对象,这样更改数据库仅仅需要更改一下配置文件即可。

<connectionStrings>
<!--SQL Server数据库配置-->
<add name="DBConnection" connectionString="Data Source=(local);Initial Catalog=AspNetStudy;User ID=sa;Password=123"/>
</connectionStrings>

<compilation>节点
  <compilation>节点配置ASP.NET使用的所有编译设置,默认的debug属性为"true",即允许调试,在这种情况下会影响网站的性能,所以在部署以后应该将该节点的值设置为false。

<authentication>节点
  设置asp.net身份验证模式,有四种身份验证模式,取值如下:
  Mode        说明
  Windows      使用Windows身份验证,适用于域用户或者局域网用户。
  Forms        使用表单验证,依靠网站开发人员进行身份验证。
  Passport      使用微软提供的身份验证服务进行身份验证。
  Node        不进行任何身份验证

<customErrors>节点
  <customErrors>节点用于定义一些错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选属性,表示程序发生错误时重定向到的默认URL,如果没有指定该属性则显示一般性错误。Mode属性是一个必选属性,它有三个可能值,他们所代表的意义分别如下:
  Mode     说明
  On      表示在本地和远程用户都会看到自定义错误信息。
  Off      禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
  RemoteOnly  表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。
  有必要说明一下本地用户和远程用户的概念。当我们访问Asp.net应用程序时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时为本地用户,否则就算为远程用户。在开发调试阶段为了查找错误。Mode属性建议设置为Off,而在部署阶段应将Mode属性设置为On或者RemoteOnly,以避免这些详细的错误信息暴露了程序代码细节从而引来黑客的入侵。

  2013-04-16

  今天同事在部署程序的时候,程序在本地测试正常,传上服务器就出错,但是不知道相信错误信息在哪里被屏蔽了,当时就是设置这个地方传上服务器后,相应的详细错误信息就显示了。

<customErrors mode="Off"></customErrors>

<error>子节点
  在<customRrrors>节点下还包含有<error>子节点,这个节点主要是根据服务器的HTTP错误状态代码而重定向到我们自定义的错误页面,注意要使<error>子节点下的配置生效,必须将<custonErrors>节点的Mode属性设置为"On"。

<customErrorsmode="On"defaultRedirect="GenericErrorPage.htm">
  <errorstatusCode="403"redirect="403.htm"/>
  <errorstatusCode="404"redirect="404.htm"/>
</customErrors>

  在上面的配置中如果用户访问的页面不存在就会跳转到404.htm页面,如果用户没有权限访问请求的页面则会跳转到403.htm页面,403.htm和404.htm都是我们自己添加的页面,我们可以再页面中给出友好的错误提示。
<httpHandlers>节点
  <httpHandlers>节点用于根据用户请求的URL和HTTP谓词将用户的请求交给相应的处理程序。可以再配置级别的任何层次配置此节点,也就是说可以针对某个特定目录下制定的特殊文件进行特殊处理。
  下面是与machine.config文件同一目录下的web.config文件中的<httpHandlers>节点配置:

<httpHandlers>
      <addpath="*.rules"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.xoml"verb="*"type="System.ServiceModel.Activation.HttpHandler,System.ServiceModel,Version=3.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/>
      <addpath="trace.axd"verb="*"type="System.Web.Handlers.TraceHandler"validate="true"/>
      <addpath="WebResource.axd"verb="GET"type="System.Web.Handlers.AssemblyResourceLoader"validate="true"/>
      <addpath="*.axd"verb="*"type="System.Web.HttpNotFoundHandler"validate="true"/>
      <addpath="*.aspx"verb="*"type="System.Web.UI.PageHandlerFactory"validate="true"/>
      <addpath="*.ashx"verb="*"type="System.Web.UI.SimpleHandlerFactory"validate="true"/>
      <addpath="*.asmx"verb="*"type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"validate="false"/>
      <addpath="*.rem"verb="*"type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/>
      <addpath="*.soap"verb="*"type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/>
      <addpath="*.asax"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.ascx"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.master"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.skin"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.browser"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.sitemap"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.dll.config"verb="GET,HEAD"type="System.Web.StaticFileHandler"validate="true"/>
      <addpath="*.exe.config"verb="GET,HEAD"type="System.Web.StaticFileHandler"validate="true"/>
      <addpath="*.config"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.cs"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.csproj"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.vb"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.vbproj"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.webinfo"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.licx"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.resx"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.resources"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.mdb"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.vjsproj"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.java"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.jsl"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.ldb"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.ad"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.dd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.ldd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.sd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.cd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.adprototype"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.lddprototype"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.sdm"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.sdmDocument"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.mdf"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.ldf"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.exclude"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.refresh"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/>
      <addpath="*.svc"verb="*"type="System.ServiceModel.Activation.HttpHandler,System.ServiceModel,Version=3.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/>
      <addpath="*"verb="GET,HEAD,POST"type="System.Web.DefaultHttpHandler"validate="true"/>
      <addpath="*"verb="*"type="System.Web.HttpMethodNotAllowedHandler"validate="true"/>
    </httpHandlers>

  从上面的配置中可以看出,针对*.mdf、*.ldf文件的Get或者Post请求都会交给System.Web.HttpForbiddenHandler来处理,处理的结果就是用户不能查看或者下载相关的文件。如果我们某个文件夹下的文件或者某个类型的文件不允许用户下载,可以在</httpHandlers>节点中增加相应的子节点。

<httpRuntime>节点

  <httpRuntime>节点用于对ASP.NET HTTP运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
例如下面的配置控制用户最大能上传的文件为40M(40*1024k),最大超时时间为60秒,最大并发请求为100个。

<httpRuntime maxRequestLength="40960" executionTimeout="60" appRequestQueueLimie="100"/>

<pages>节点
<pages>节点用于表示对特定页设置,主要有三个属性,分别如下:
属性名         说明
buffer         是否启用了HTTP响应缓冲。
enableViewStateMac  是否应该对页的视图状态运行计算机身份验证检查(MAC)
validateRequest    是否验证用户输入中有跨站点脚本攻击和SQL注入式漏洞攻击,默认为true,如果出现匹配情况就会发生HttpRequestValidationException异常。对             于包含在线文本编辑器页面一半自行验证用户输入而将此属性视为false。

<pagesbuffer="true"enableViewStateMac="true"validateRequest="false"/>

<sessionState>节点
  <sessionState>节点用于配置当前asp.net应用程序的会话状态配置。以下就是一个常见配置:

<sessionStatecookieless="false"mode="InProc"timeout="30"/>

  上面的节点配置是设置在asp.net应用程序中启用Cookie,并且指定会话状态模式为在进程中保存会话状态,同时还指定了会话超时为30分钟。
  <sessionState>节点的Mode属性可以是以下几种值之一:
  属性值        说明
  Custom       使用自定义数据来存储会话状态数据。
  InProc        默认值。由asp.net辅助进程来存储会话状态数据。
  Off          禁用会话状态。
  SQLServer      使用进程外SQL Server数据库保存会话状态数据。
  StateServer      使用进程外 ASP.NET 状态服务存储状态信息。
  一般默认情况下使用InProc模式来存储会话状态数据,这种模式的好处是存取速度快,缺点是比较占用内存,所以不宜在这种模式下存储大型的用户会话数据。

<globalization>节点
用于配置应用程序的全球化设置。此节点有几个比较重要的属性,分别如下:
  属性名        说明
  fileEncoding     可选属性。设置.aspx、.asmx 和 .asax 文件的存储编码。
  requestEncoding   可选属性。设置客户端请求的编码,默认为UTF-8.
  responseEncoding   可选属性。设置服务器端响应的编码,默认为UTF-8.
  以下就是asp.net应用程序中的默认配置:

<globalizationfileEncoding="utf-8"requestEncoding="utf-8"responseEncoding="utf-8"/>
 

.net学习笔记----WebConfig常用配置节点介绍的更多相关文章

  1. 配置文件入门 - WebConfig.config常用配置节点介绍

    一.配置文件入门 .Net提供了一种保存项目配置信息的办法,就是利用配置文件,配置文件的后缀一般是.config.在WinForm程序中配置文件一般是App.config.在Asp.net中一般默认是 ...

  2. MySql cmd下的学习笔记 —— 有关常用函数的介绍(数学函数,聚合函数等等)

    (一)数学函数 abs(x)              返回x的绝对值 bin(x)               返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x)      ...

  3. 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法

    @RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...

  4. python3.4学习笔记(十) 常用操作符,条件分支和循环实例

    python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...

  5. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  6. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  7. 【转】Pandas学习笔记(一)基本介绍

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  8. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  9. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

随机推荐

  1. objc/runtime

    "T@\"MyInnerObject\",&,N,V_myInnerObject" MyInnerObject "Td,N,V_cgfloat ...

  2. Android学习笔记(二十二)——短信接收与发送

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 当手机接收到一条短信的时候, 系统会发出一条值为 android.provider.Telephony.SMS ...

  3. 剑指Offer 矩形覆盖

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?   解法,还是斐波那契数列   AC代码: class So ...

  4. HDU 4707 DFS

    Problem Description One day, Lin Ji wake up in the morning and found that his pethamster escaped. He ...

  5. getopt函数的使用——分析命令行参数

    getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...

  6. js之作用域和面向对象

    作用域 JavaScript以函数为作用域 函数的作用域在函数未被调用之前,已经创建 函数的作用域存在作用域链,并且也是在被调用之前创建 示例一 xo = "alex"; func ...

  7. django 的文件上传

    template html(模板文件): <form enctype="multipart/form-data" method="POST" action ...

  8. tornado + supervisor + nginx 的一点记录

    看了比较多的blog基本都是这个架构: supervisor ------------ app1 |-------app2 |-------.... |-------appn |-------ngin ...

  9. ndk学习5: ndk中使用c++

    默认情况下ndk不支持标准C++库,异常, rtti等   在ndk文档有关于C++ support的详细介绍   一. 使用C++标准库 介绍: 默认是使用最小额度的C++运行时库, 在Applic ...

  10. 【云计算】Cloudify-基于TOSCA规范的开源云应用编排系统

      .cloudify-manager-blueprints:https://github.com/cloudify-cosmo/cloudify-manager-blueprints/tree/3. ...