Aspnet中的web config配置.docx
- 文档编号:7319174
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:104.40KB
Aspnet中的web config配置.docx
《Aspnet中的web config配置.docx》由会员分享,可在线阅读,更多相关《Aspnet中的web config配置.docx(14页珍藏版)》请在冰豆网上搜索。
Aspnet中的webconfig配置
A中的web.config配置
ByBendon20101123
目录
A中的web.config配置...1
一、配置文件保存位置...2
二、配置文件加载顺序...2
三、配置文件节点介绍...3
1.
2.
3.
4.
四、针对配置文件的一些编程操作...11
1.运行时进行配置文件的修改...11
2.配置节点的加密...12
web.config是中保存配置信息(比如数据库连接字符串等)的重要文件。
它是基于xml的文本文件方式放在Web应用程序的任何目录中,并且默认不随源文件编译到Dll中,而运行环境随时监视着它是否有改变,一但有变动,系统会自动重新加载里面的最新内容。
一、配置文件保存位置
.net的默认配置文件保存在“windows目录\Microsoft.NET\Framework\对应.net版本\config”文件夹下面。
不同的操作系统windows目录不一样,我们在命令行下输入“echo%windir%”查看windows目录所在的位置。
图:
web.config所在的目录
A中有两个非常重要的配置文件,分别是machine.config和web.config,它们都位于config文件夹下面。
这两个文件一般不需要我们手工是维护它,保持默认即可。
但针对应用程序,它自身会有0个,1个或者多个web.config配置文件,多个配置文件会存在加载顺序问题。
下节会介绍。
注意,传说中.net3.0和.net3.5只是在.net2.0的基础上扩充中,所以还是没用的.net2.0的配置文件。
它们连config这个目录都没有。
二、配置文件加载顺序
IIS在A网站启动时,会加载配置文件中的配置信息,然后缓存这些信息,不会每次要用都去读取配置文件,只是IIS会随时监视着这些文件的变化,一量有变化,它会重新去读取并缓存配置信息。
A网站运行时会按照以下方式加载配置文件中的节点信息:
1)如果在当前运行页面所在的目录下有web.config文件,则查找是否存在所需要的节点,如果存在则返回结果,并停止下一步地查找。
2)如里所在目录不存在web.config配置或者配置文件里没有所需要的节点,则查找它所在的上一级目录的配置文件中的节点,直到网站根目录。
(问题:
IIS6中的虚拟目录算不算根目录)
3)如果网站根目录中都不存在web.config或者所需要的配置节点,转而到“windows目录\Microsoft.NET\Framework\对应.net版本\config\web.config”中去查找。
4)如果第3条中还没找到,继续到“windows目录\Microsoft.NET\Framework\对应.net版本\config\machine.config”中去查找。
5)如果还没找到,那就报错吧。
存在两个问题
1)IIS6中的虚拟目录算不算根目录。
2)在系统运行时,在一个原本没有web.config的目录中手工加上一个web.config,会不会自动加载。
三、配置文件节点介绍
Web.config文件是一个xml文本文件,它的根节点为
下面针对各节点配置进行介绍。
1.
configSections元素指定了配置节和处理程序声明。
由于ASP.NET不对如何处理配置文件内的设置作任何假设,因此这非常必要。
但ASP.NET会将配置数据的处理委托给配置节处理程序。
配置结构信息如下:
--定义配置节处理程序与配置元素之间的关联。
-->
--定义配置节处理程序与配置节之间的关联。
-->
--移除对继承的节和节组的引用。
-->
--移除对继承的节和节组的所有引用,只允许由当前section和sectionGroup元素添加的节和节组。
-->
每个section元素标识一个配置节或元素以及对该配置节或元素进行处理的关联ConfigurationSection派生类。
可以在sectionGroup元素中对section元素进行逻辑分组,以对section元素进行组织并避免命名冲突。
section和sectionGroup元素包含在configSections元素中。
如果配置文件中包含configSections元素,则configSections元素必须是configuration元素的第一个子元素。
下面我们来示例写一个自定义配置信息,并完成它的SectionHandler,首先我们在
type="ConfigTest.SectionHandler.MySectionHandler,ConfigTest.SectionHandler"/> 编写自定义SectionHandler,我们为MySectionHandler返回一个Hashtable的数据。 namespaceConfigTest.SectionHandler { publicclassMySectionHandler: IConfigurationSectionHandler { publicobjectCreate(objectparent,objectconfigContext,System.Xml.XmlNodesection) { Hashtableht=newHashtable(); foreach(XmlNodenodeinsection.ChildNodes) { if(node.Name=="add") { ht.Add(node.Attributes["key"].Value,node.Attributes["value"].Value); } } returnht; } } } 在页面中使用该Section,由ConfigurationManager.GetSection得到SectionHandler返回的Hashtable。 注意参数结构。 protectedvoidPage_Load(objectsender,EventArgse) { Hashtableht=ConfigurationManager.GetSection("mySectionGroup/mySection")asHashtable; foreach(DictionaryEntrydeinht) { Response.Write(de.Key+"-"+de.Value+" } } 2. 该节点下主要用来存储应用程序的一些配置信息,也可以把数据库连接字符串也放在这里,不过.net2.0提供了connectionStrings节点,所以数据库连接字符串还是不建议放在这里,下面为一个图片类型的实例。 --图片类型扩展名--> 调用方法为: stringImgType=ConfigurationManager.AppSettings["ImgType"]; 3. connectionStrings和appSettings类似,不过用于保存配置数据库连接信息,下面给一个实例。 调用方式为: stringconnStr=ConfigurationManager.ConnectionStrings["SqlserverConnStr"].ConnectionString; 4. Ø 其中mode属性有三种值,On/Off/RemoteOnly,默认为RemoteOnly。 Error节点指定给定HTTP状态代码的自定义错误页面。 Ø 该节点为配置ASP.NET身份验证方案,该方案用于识别查看ASP.NET应用程序的用户。 Mode属性包含四种身份验证模式: 1.Windows(默认) 将Windows验证指定为默认的身份验证模式。 将它与以下任意形式的MicrosoftInternet信息服务(IIS)身份验证结合起来使用: 基本、摘要、集成Windows身份验证(NTLM/Kerberos)或证书。 在这种情况下,您的应用程序将身份验证责任委托给基础IIS。 2.Forms 将ASP.NET基于窗体的身份验证指定为默认身份验证模式。 3.Passport 将MicrosoftPassportNetwork身份验证指定为默认身份验证模式。 4.None 不指定任何身份验证。 您的应用程序仅期待匿名用户,否则它将提供自己的身份验证。 下面的代码示例演示如何为基于窗体的身份验证配置站点、指定传输来自客户端的登录信息的Cookie的名称以及指定当初始身份验证失败时使用的登录页的名称。 必须将authorization节包含在内才能要求对所有用户进行Forms身份验证,并拒绝匿名用户访问站点。 "/> Login.aspx中登陆通过: FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text,true); Ø HttpHandlers可用于根据请求中指定的URL和HTTP谓词将传入的请求映射到相应的处理程序。 可以针对某个特定的目录下指定的特殊文件进行特殊处理。 下面我们来针对网站path目录下的所有*.abc文件夹来编写自定义HttpHandle。 先添加到配置文件: 编写AbcHttpHandler: namespaceConfigTest.HttpHandler { publicclassAbcHttpHandler: IHttpHandler,IRequiresSessionState { publicboolIsReusable { get{returntrue;} } publicvoidProcessRequest(HttpContextcontext) { context.Response.Write(" context.Session["Test"]="你在调用AbcHttpHandler容器中调用Session"; context.Response.Write(context.Session["Test"]); } } } 系统调用结果: 图: HttpHandler测试 我们还可以使用HttpHandlerFactory来进行handler自行切换。 我们先定义两个HttpHandler,分别是httpHandler1和httpHandler2。 然后定义一个继承于IHttpHandlerFactory的MyHandlerFactory来动态切换httpHandler,看代码: namespaceConfigTest.HttpHandler { publicclassMyHandlerFactory: IHttpHandlerFactory { publicIHttpHandlerGetHandler(HttpContextcontext,stringrequestType,stringurl,stringpathTranslated) { if(url.IndexOf("1")>-1) { returnnewHttpHandler1(); } elseif(url.IndexOf("2")>-1) { returnnewHttpHandler2(); } //返回默认Handler returncontext.Handler; } publicvoidReleaseHandler(IHttpHandlerhandler) { //thrownewNotImplementedException(); } } publicclassHttpHandler1: IHttpHandler,IRequiresSessionState { publicboolIsReusable { get{returntrue;} } publicvoidProcessRequest(HttpContextcontext) { context.Response.Write("
");HelloHttpHandler
");HttpHandler1
");
}
}
publicclassHttpHandler2:
IHttpHandler,IRequiresSessionState
{
publicboolIsReusable
{
get{returntrue;}
}
publicvoidProcessRequest(HttpContextcontext)
{
context.Response.Write("
HttpHandler2
");}
}
}
这里只是测试,我们设定url中存在1这个字符时用HttpHandler1,存在2这个字符里用HttpHandler2,否则返回系统默认的Handler。
我们还得增加配置项:
添加了一个httpHandler的配置项针对HandlerFactory目录下所有文件,我们运行测试一下:
图:
HandlerFactory测试
Ø
当请求在管道中传递时,HttpApplicaion对象中一系列的事件被触发.我们已经看到这些事件在Global.asax中作为事件被发布.这种方法是特定于应用程序的,可能并不总是你想要的.如果你要建立一个通用的可用被插入任何Web应用程序的HttpApplication事件钩子,你可用使用HttpModule,这是可复用的,不需要特定语应用程序代码的,只需要web.config中的一个条目.
和HttpHandler一样,编写继承于IHttpModule的HttpModule:
namespaceConfigTest.HttpModule
{
publicclassMyHttpModule:
IHttpModule
{
publicvoidDispose()
{
thrownewNotImplementedException();
}
publicvoidInit(HttpApplicationcontext)
{
context.BeginRequest+=newEventHandler(context_BeginRequest);
}
voidcontext_BeginRequest(objectsender,EventArgse)
{
HttpApplicationapplication=(HttpApplication)sender;
HttpContextcontext=application.Context;
context.Response.Write("AddBeginRequestbyMyHttpModule!
");
}
}
}
我们只是在每个页面上添加了一句话:
AddBeginRequestbyMyHttpModule!
看结果:
图:
HttpModule测试
Location节点是用来指定子配置的资源。
如果在应用程序中想对某个目录做特殊处理,则可以用该节点来实现。
举两个例子。
下面的代码示例演示如何仅将指定页的上载文件大小限制设置为128KB。
为指定目录的图片加水印:
--图片水印设置Handler-->
四、针对配置文件的一些编程操作
1.运行时进行配置文件的修改
这里我们演示对appSettings节点进行修改:
publicstaticvoidSetAppSetting(stringkey,stringvalue)
{
Configurationconfig=WebConfigurationManager.OpenWebConfiguration("~");
AppSettingsSectionappSetting=config.AppSettings;
//如果不存在则添加
if(appSetting.Settings[key]==null)
{
appSetting.Settings.Add(key,value);
}
else//否则修改
{
appSetting.Settings[key].Value=value;
}
config.Save(ConfigurationSaveMode.Full);
}
2.配置节点的加密
有时候我们要对关键节点进行加密,.net给我们提供了加密的方法,下面我们演示对connectionStrings节点进行加密:
publicstaticvoidProtectSection()
{
Configurationconfig=WebConfigurationManager.OpenWebConfiguration("~");
ConfigurationSectionsection=config.Sectio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Aspnet中的web config配置 Aspnet 中的 web config 配置