Web.Config详解
Web.Config是ASP.NET项目中一个很重要的文件,还记得当年大学时做毕业设计,答辩时一个老师的问题就是Web.Config有什么作用?当时回答的是里面可以存储数据库连接信息,老师追问,还可以做什么?我。。。无言以对。
近来整理知识点,准备好好的把基础夯实一下,技术无论繁简,务求一步一个脚印,做到真正的领会及掌握。所以特地上网搜集了一些资料,对其中一些知识点都敲代码验证一遍,记录下来以备不时翻阅温习。
- Web.Config读取及访问机制
.NET程序访问配置文件中某个节点时,首先尝试在当前目录下的Web.Config中查找相应节点,如文件或节点不存在则沿着上级目录直至根目录进行查找。如果一直到根目录都没有寻找到相应的节点,则在%windir%\Microsoft.NET\Framework\vx.0\CONFIG\web.config文件中查找。如果依然没有找到,则在%windir%\Microsoft.NET\Framework\vx.0\CONFIG\machine.config文件中查找。如果依然没有找到,则返回null。
ASP.NET网站IIS启动时会加载配置文件中的配置信息并缓存起来,这样就不必每次都重新读取配置信息。在运行过程中应用程序会监测配置文件的变化情况,一旦配置信息被修改,就重新读取并进行缓存。
- 各配置节详解
应用VS2013新建了一个Web应用程序项目,打开Web.Config可以看到基本结构如下图:
1. ConfigSections
ConfigSections的作用主要是配置自定义的节点,如文件上传应用、工厂方法应用等。
代码示例:
1 <configSections> 2 <sectionGroup name="section group name"> 3 <section name="section name" type="configuration section handler class" /> 4 </sectionGroup> 5 </configSections> 6 7 <section group name> 8 <section name> 9 <add key="key1" value="value1" /> 10 </section name> 11 </section group name>
定义了节点之后可以通过实现IConfigurationSectionHandler接口返回一个对象,然后调用System.Configuration.ConfigurationManager.GetSection()方法返回节点信息,具体实现方式网上有实例,限于篇幅问题,在后续博客中再补充进来。
2. connectionStrings
connectionStrings的作用主要是保存数据库连接串信息。
代码示例:
1 <connectionStrings> 2 <add name="DefaultConnection" connectionString="Data Source=192.168.1.1;Initial Catalog=testDb;User ID=sa;Password=sa" providerName="System.Data.SqlClient" /> 3 </connectionStrings>
代码里获取连接串:
1 ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
3. compilation
代码示例:
1 <compilation debug="true" targetFramework="4.5" defaultLanguage="c#" batch="true" />
debug = "true" 代表启用调试,将调试符号插入已编译的页面中,会影响性能,所以应该只在开发环境中启用。
defaultLanguage = "c#" 设置默认语言
batch = "true" 是否支持批处理
4. authentication
代码示例:
1 <authentication mode="None" />
设置ASP.NET身份验证方式,有三种验证方式:
(1)Windows
直接通过IIS提供身份验证。
(2)Forms
使用应用程序特定的逻辑进行验证
(3)Passport
由Microsoft提供的集中身份验证服务进行验证
ASP.NET身份验证是一个相对比较复杂的知识点,后续会单独写一篇博文进行总结。
5. AppSettings
AppSettings一般用于存储项目中的一些公用配置信息。
示例代码:
1 <appSettings> 2 <add key="IP" value="192.168.0.1"/> 3 </appSettings>
该节点位置在Configuration根目录下。
程序中调用的方式示例代码:
1 ConfigurationManager.AppSettings["IP"].ToString();
6. CustomErrors
用于处理自定义错误信息,位于<System.Web>配置节下。
示例代码如下:
1 <customErrors mode="RemoteOnly" defaultRedirect="error.html"></customErrors>
mode = "On" 本地用户及远程用户都会看到自定义错误信息。
mode = "Off" 禁用自定义错误信息,本地及远程用户都将看到详细错误信息。
mode = "RemoteOnly" 本地用户将看到详细错误信息,远程用户将看到自定义错误信息。
DefaultRedirect = "error.html" 发生错误时重定向的url。
也可以根据http状态码具体指定错误页(前提是mode设置为on)
示例代码如下:
1 <customErrors mode="On" defaultRedirect="GenericErrorPage.htm"> 2 <error statusCode="403" redirect="403.htm" /> 3 <error statusCode="404" redirect="404.htm" /> 4 </customErrors>
7. Httphandlers
根据用户请求的url及Http谓词将用户的请求交给相应的处理程序。
示例代码如下:
1 <httpHandlers> 2 <add path="Common/*.txt" verb="*" type="System.Web.HttpForbiddenHandler"/> 3 </httpHandlers>
配置限定应用System.Web.HttpForbiddenHandler处理Common下的txt类型文件,即禁止访问相应文件。
实际使用过程中,先把这个配置节放置在<system.web>下了,结果本地浏览运行报错。。
对于错误原因只是大体有个感觉是服务器处理机制是IIS还是本地WebServer的不同导致的,还未知道所以然,这个后续博客深入研究。但错误提示上解决方法已经标识的很清楚了——“将配置迁移到 system.webServer/handlers 节”,于是修改代码如下:
1 <system.webServer> 2 <modules> 3 <remove name="FormsAuthenticationModule" /> 4 </modules> 5 <handlers> 6 <add name="handlerName" path="Common/*.txt" verb="*" type="System.Web.HttpForbiddenHandler"/> 7 </handlers> 8 </system.webServer>
其中handler部分为新增的,新增一个页面,页面上放置超链接访问Common下txt文件,页面如预期跳转到了友好错误处理页面。
8. httpRuntime
用于对Asp.NET Http运行库进行设置
示例代码如下:
1 <httpRuntime targetFramework="4.5" executionTimeout="60" maxRequestLength="40960" appRequestQueueLimit="100" />
设置目标Framework版本为4.5,同时最大超时时间为60s,最大并发请求为100个,最大上传文件为40M。
9. Pages
用于表示对特定页设置。
示例代码如下:
1 <pages buffer="true" enableViewStateMac="true" validateRequest="true"> 2 <namespaces> 3 <add namespace="System.Web.Optimization" /> 4 <add namespace="Microsoft.AspNet.Identity" /> 5 </namespaces> 6 <controls> 7 <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" /> 8 </controls> 9 </pages>
属性
buffer: 是否启用了http响应缓冲。
enableViewStateMac: 是否对页面的视图状态进行计算机身份验证检查,以防止用户篡改。
validateRequest: 是否验证用户输入中包含跨站点脚本攻击或Sql注入攻击漏洞。
子元素
Controls: 定义标记前缀所在的 register 指令和命名空间的集合。
namespaces: 定义一个将在程序集预编译期间使用的导入指令的集合。
10. SessionState
用于配置当前应用程序的会话状态
示例代码如下:
1 <sessionState cookieless="false" timeout="30" mode="InProc" customProvider="DefaultSessionProvider"> 2 <providers> 3 <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> 4 </providers> 5 </sessionState>
上述配置设置在应用程序中启用cookie,在进程中保存会话状态,指定会话超时为30分钟。
其中mode值包括以下几个选项:
Custom:使用自定义数据存储会话状态数据。
InProc:默认值,由ASP.NET辅助进程来存储会话状态数据,存取速度快,但比较耗内存,不适合存储大型用户会话数据。
Off:禁用会话状态。
Sql Server:使用进程外Sql数据库保存会话状态数据。
StateServer:使用进程外Asp.NET状态服务存储会话状态数据。
11. globalization
配置应用程序的全球化设置。
示例代码如下:
1 <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"/>
fileEncoding:设置aspx、asmx、asax文件的存储编码。
requestEncoding:设置客户端请求的编码。
responseEncoding:设置服务端响应的编码。
总结:小小的一个web.config还真是包罗万象,这还只是其中一部分配置节,其它的配置节后续再陆续补充进来,同时针对每一个配置节又有许多需要学习的点,路漫漫其修远兮,努力吧!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。