.net中webconfig 详解
.net 提供的是针对当前机器的配置。---名称:machine.config
运行机制:asp.net网站iis启动的时候会加载配置文件中的配置信息,然后缓存这些信息,这样就不必每次去读取配置信息。在运行过程中asp.net应用程序会监视配置文件的变化情况,一旦编辑了这些配置信息,就会重新读取这些配置信息并缓存。
配置文件节点:
必须明白: web.config文件是一个xml文件
所隶属根节点的名称:
<configuration>
子节点:<configsections></configsections>
<appsettings> </appsettings>
<connectionstrings></connectionstrings>
<system.web></system.web>
特殊: <system.webserver></system.webserver>-----用于指定适用于 web 应用程序的 iis 7.0 设置,只适用于 iis 7.0 集成模式 不适用于经典模式,如果应用程序正在经典模式下运行,则会忽略 web.config 文件的
<configuration>
节点分析:
1.<connectionstrings>节点
主要用于配置数据库连接,可以在<connectionstrings>节点中增加任意个节点来保存数据库连接字符串然后通过代码的方式动态获取节点的值来实例化数据库连接对象。
例如:
<connectionstrings>
<!--sql server数据库配置--> <add name="你所要取的名字(任意的)" connectionstring=" date source=数据库登陆名 ; initial catalog=数据库名称; user id=登录人 password=登录人密码 "/>是可以配置多个数据库的连接的
<add name="aspnetstudyconnectionstring1" connectionstring="data source=(local);initial catalog=aspnetstudy;user id=sa;password=sa"/>
<add name="connectionstring" connectionstring="data source=10.0.0.52;initial catalog=new_hospital_dev;user id=hospital;pwd=hospital;"/>
</connectionstrings>
在代码中药读取数据库连接对象的做法:
//读取web.config节点配置
string connectionstring = configurationmanager.connectionstrings["aspnetstudyconnectionstring1"].connectionstring;
//实例化sqlconnection对象
sqlconnection connection = new sqlconnection(connectionstring);
从中可以看出好处:一旦开发时所用的数据库和部署时的数据库不一致,仅仅需要用记事本之类的文本编辑工具编辑connectionstring属性的值就行了
2.<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>
读取</appsettings>节点中的值:
string filetype= configurationmanage.appsettings["filetype"]; ----其实就是键值对的形式 取值的
3.<system.web> 节点:
所属子节点:
3.1.<compilation>节点
作用:节点配置 asp.net 使用的所有编译设置。默认的debug属性为“true”,即允许调试,在这种情况下会影响网站的性能所以在程序编译完成交付使用之后应将其设为“false”
例如:
<compilation targetframework="4.0" debug="true">
<buildproviders>
<add extension=".html" type="system.web.compilation.pagebuildprovider"/>
</buildproviders>
</compilation>
3.2.<authentication>节点
作用:控制用户对网站、目录或者单独页的访问
设置asp.net身份验证模式,有四种身份验证模式,它们的值分别如下:
mode 说明
windows 使用windows身份验证,适用于域用户或者局域网用户。
forms 使用表单验证,依靠网站开发人员进行身份验证。
passport 使用微软提供的身份验证服务进行身份验证。
none 不进行任何身份验证。
例如: <!--请求模式-->
<authentication mode="forms"/>
3.2.<customerrors>节点
<customerrors>节点用于定义 一些自定义错误信息的信息。此节点有mode和defaultredirect两个属性,其中defaultredirect属性是一个可选属性,表示应 用程序发生错误时重定向到的默认url,如果没有指定该属性则显示一般性错误。mode属性是一个必选属性,它有三个可能值,它们所代表的意义分别如下:
mode 说明
on 表示在本地和远程用户都会看到自定义错误信息。
off 禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
remoteonly 表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。
这 里有必要说明一下本地用户和远程用户的概念。当我们访问asp.net应用程时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时成为 本地用户,反之则称之为远程用户。在开发调试阶段为了便于查找错误mode属性建议设置为off,而在部署阶段应将mode属性设置为on或者 remoteonly,以避免这些详细的错误信息暴露了程序代码细节从而引来黑客的入侵。
例子:
<!--错误跳转 mode="remoteonly"-->
<customerrors mode="off" defaultredirect="/error.aspx">
<error statuscode="404" redirect="/404.aspx"/>
<error statuscode="500" redirect="/500.aspx"/>
</customerrors>
3.3<error>子节点
在<customerrors>节点下还包含 有<error>子节点,这个节点主要是根据服务器的http错误状态代码而重定向到我们自定义的错误页面,注意要 使<error>子节点 下的配置生效,必须将<customerrors>节点节点的mode属性设置为“on”。下面是一个例 子:
<customerrors mode="on" defaultredirect="genericerrorpage.htm">
<error statuscode="403" redirect="403.htm" />--如果用户没有权限访问请求的页面则会跳转到403.htm页面
<error statuscode="404" redirect="404.htm" />--如果用户访问的页面不存在就会跳转到404.htm页面
</customerrors>
403.htm和404.htm页面都是我们自己添加的页面
3.4<httphandlers>节点
作用:用于根据用户请求的url和http谓词将用户的请求交给相应的处理程序,处理的结果就是用户不能查看或者下载相关的文件
如果我们某个文件夹下的文件或 者某个类型的文件不允许用户下载,可以在</httphandlers>节点中增加相应的子节点。
例子:我们的asp.net应用程序中建立一个ipdata目录,在ipdata目录中创建一个ipdata.txt文件,在web.config中添加以下配置
<httphandlers>
<add path="ipdata/*.txt" verb="*" type="system.web.httpforbiddenhandler"/>---代码的作用是禁止访问ipdata目录下的任何txt文件
<add path="*.mdf" verb="*" type="system.web.httpforbiddenhandler" validate="true"/>
<add path="*.ldf" verb="*" type="system.web.httpforbiddenhandler" validate="true"/>---针对*.mdf、*.ldf文件,get或者post请求都会交给 system.web.httpforbiddenhandler来处理,用户不能查看或者下载相关的文件
</httphandlers>
3.5.<httpruntime>节点
用于对 asp.net http 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
例如下面的配置控制用户最大能上传的文件为40m(40*1024k),最大超时时间为60秒,最大并发请求为100个。
<httpruntime maxrequestlength="40960" executiontimeout="60" apprequestqueuelimit="100"/>
3. 6.<pages>节点
用于表示对特定页设置,主要有三个属性
属性名 说明
buffer 是否启用了 http 响应缓冲。
enableviewstatemac 是否应该对页的视图状态运行计算机身份验证检查 (mac),以放置用户篡改,默认为false,如果设置为true将会引起性能的降低。
validaterequest 是 否验证用户输入中有跨站点脚本攻击和sql注入式漏洞攻击,默认为true,如果出现匹配情况就会发 httprequestvalidationexception 异常。对于包含有在线 文本编辑器页面一般自行验证用户输入而将此属性设为false。
下面就是一个配置节点的例子:
<pages buffer="true" enableviewstatemac="true" validaterequest="false"/>
3.7<sessionstate>节点
<sessionstate>节点用于配置当前asp.net应用程序的会话状态配置。以下就是一个常见配置:
<sessionstate cookieless="false" mode="inproc" timeout="30" />
上面的节点配置是设置在asp.net应用程序中启用cookie,并且指定会话状态模式为在进程中保存会话状态,同时还指定了会话超时为30分钟。
<sessionstate>节点的mode属性可以是以下几种值之一:
属性值 说明
custom 使用自定义数据来存储会话状态数据。
inproc 默认值。由asp.net辅助进程来存储会话状态数据。
off 禁用会话状态。
sqlserver 使用进程外sql server数据库保存会话状态数据。
stateserver 使用进程外 asp.net 状态服务存储状态信息。
一般默认情况下使用inproc模式来存储会话状态数据,这种模式的好处是存取速度快,缺点是比较占用内存,所以不宜在这种模式下存储大型的用户会话数据。
4<system.webserver>
----------------------
<defaultdocument>
作用:当请求 url 未包含 web 应用程序的特定文件时,iis 7.0 将提供一个默认文件。
在 system.webserver 元素内,创建一个 defaultdocument 元素。
在 defaultdocument 元素内,创建一个 files 元素。
在 files 元素内创建一个 add 元素,并在 value 属性内指定默认文件的路径和名称。
<configuration>
<system.webserver>
<defaultdocument> <files> <add value="products.aspx" /> </files> </defaultdocument>-----配置默认文件,为提供 products.aspx 文件作为默认文件
</system.webserver>
</configuration>