Aspnet中的web config配置Word文件下载.docx

上传人:b****6 文档编号:20427542 上传时间:2023-01-22 格式:DOCX 页数:14 大小:104.40KB
下载 相关 举报
Aspnet中的web config配置Word文件下载.docx_第1页
第1页 / 共14页
Aspnet中的web config配置Word文件下载.docx_第2页
第2页 / 共14页
Aspnet中的web config配置Word文件下载.docx_第3页
第3页 / 共14页
Aspnet中的web config配置Word文件下载.docx_第4页
第4页 / 共14页
Aspnet中的web config配置Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Aspnet中的web config配置Word文件下载.docx

《Aspnet中的web config配置Word文件下载.docx》由会员分享,可在线阅读,更多相关《Aspnet中的web config配置Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

Aspnet中的web config配置Word文件下载.docx

这两个文件一般不需要我们手工是维护它,保持默认即可。

但针对应用程序,它自身会有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文本文件,它的根节点为<

configuration>

该节点下包含常见的子节点有:

、<

(保存数据库连接字符串)、<

和<

下面针对各节点配置进行介绍。

configSections元素指定了配置节和处理程序声明。

由于ASP.NET不对如何处理配置文件内的设置作任何假设,因此这非常必要。

但ASP.NET会将配置数据的处理委托给配置节处理程序。

配置结构信息如下:

!

--定义配置节处理程序与配置元素之间的关联。

-->

section/>

--定义配置节处理程序与配置节之间的关联。

sectionGroup/>

--移除对继承的节和节组的引用。

remove/>

--移除对继承的节和节组的所有引用,只允许由当前section和sectionGroup元素添加的节和节组。

clear/>

/configSections>

每个section元素标识一个配置节或元素以及对该配置节或元素进行处理的关联ConfigurationSection派生类。

可以在sectionGroup元素中对section元素进行逻辑分组,以对section元素进行组织并避免命名冲突。

section和sectionGroup元素包含在configSections元素中。

如果配置文件中包含configSections元素,则configSections元素必须是configuration元素的第一个子元素。

下面我们来示例写一个自定义配置信息,并完成它的SectionHandler,首先我们在<

节点下添加configSections。

sectionGroupname="

mySectionGroup"

>

sectionname="

mySection"

requirePermission="

true"

type="

ConfigTest.SectionHandler.MySectionHandler,ConfigTest.SectionHandler"

/>

/sectionGroup>

mySectionGroup>

mySection>

addkey="

key1"

value="

value1"

key2"

value2"

key3"

value3"

key4"

value4"

key5"

value5"

/mySection>

/mySectionGroup>

compilationdebug="

targetFramework="

4.0"

/system.web>

/configuration>

编写自定义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+"

br>

"

);

该节点下主要用来存储应用程序的一些配置信息,也可以把数据库连接字符串也放在这里,不过.net2.0提供了connectionStrings节点,所以数据库连接字符串还是不建议放在这里,下面为一个图片类型的实例。

--图片类型扩展名-->

ImgType"

.bmp;

.jpg;

.gif;

.png"

/>

/appSettings>

调用方法为:

stringImgType=ConfigurationManager.AppSettings["

];

connectionStrings和appSettings类似,不过用于保存配置数据库连接信息,下面给一个实例。

addname="

SqlserverConnStr"

connectionString="

DataSource=Aron1;

InitialCatalog=pubs;

UserId=sa;

Password=asdasd;

OrcleConnStr"

Provider=msdaora;

DataSource=MyOracleDB;

UserId=UserName;

/connectionStrings>

调用方式为:

stringconnStr=ConfigurationManager.ConnectionStrings["

].ConnectionString;

为.net应用程序的行为方式配置节点,该节点包含很多子节点,很多子节点已经由.net配置好了,这里我们只来看看一些重要的配置节点。

Ø

<

customErrors>

customErrorsdefaultRedirect="

GenericError.htm"

mode="

RemoteOnly"

errorstatusCode="

500"

redirect="

InternalError.htm"

/customErrors>

其中mode属性有三种值,On/Off/RemoteOnly,默认为RemoteOnly。

Error节点指定给定HTTP状态代码的自定义错误页面。

authentication>

该节点为配置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身份验证,并拒绝匿名用户访问站点。

authenticationmode="

Forms"

formsname="

401kApp"

loginUrl="

/login.aspx"

/authentication>

authorization>

denyusers="

?

/authorization>

Login.aspx中登陆通过:

FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text,true);

httpHandlers>

HttpHandlers可用于根据请求中指定的URL和HTTP谓词将传入的请求映射到相应的处理程序。

可以针对某个特定的目录下指定的特殊文件进行特殊处理。

下面我们来针对网站path目录下的所有*.abc文件夹来编写自定义HttpHandle。

先添加到配置文件:

addpath="

path/*.abc"

verb="

*"

type="

ConfigTest.HttpHandler.AbcHttpHandler,ConfigTest.HttpHandler"

/httpHandlers>

编写AbcHttpHandler:

namespaceConfigTest.HttpHandler

publicclassAbcHttpHandler:

IHttpHandler,IRequiresSessionState

publicboolIsReusable

get{returntrue;

}

publicvoidProcessRequest(HttpContextcontext)

context.Response.Write("

h1>

b>

HelloHttpHandler<

/b>

/h1>

context.Session["

Test"

]="

你在调用AbcHttpHandler容器中调用Session"

;

context.Response.Write(context.Session["

]);

系统调用结果:

HttpHandler测试

我们还可以使用HttpHandlerFactory来进行handler自行切换。

我们先定义两个HttpHandler,分别是httpHandler1和httpHandler2。

然后定义一个继承于IHttpHandlerFactory的MyHandlerFactory来动态切换httpHandler,看代码:

publicclassMyHandlerFactory:

IHttpHandlerFactory

publicIHttpHandlerGetHandler(HttpContextcontext,stringrequestType,stringurl,stringpathTranslated)

if(url.IndexOf("

1"

)>

-1)

returnnewHttpHandler1();

elseif(url.IndexOf("

2"

returnnewHttpHandler2();

//返回默认Handler

returncontext.Handler;

publicvoidReleaseHandler(IHttpHandlerhandler)

//thrownewNotImplementedException();

publicclassHttpHandler1:

HttpHandler1<

publicclassHttpHandler2:

HttpHandler2<

这里只是测试,我们设定url中存在1这个字符时用HttpHandler1,存在2这个字符里用HttpHandler2,否则返回系统默认的Handler。

我们还得增加配置项:

HandlerFactory/*.*"

ConfigTest.HttpHandler.MyHandlerFactory,ConfigTest.HttpHandler"

添加了一个httpHandler的配置项针对HandlerFactory目录下所有文件,我们运行测试一下:

HandlerFactory测试

httpModules>

当请求在管道中传递时,HttpApplicaion对象中一系列的事件被触发.我们已经看到这些事件在Global.asax中作为事件被发布.这种方法是特定于应用程序的,可能并不总是你想要的.如果你要建立一个通用的可用被插入任何Web应用程序的HttpApplication事件钩子,你可用使用HttpModule,这是可复用的,不需要特定语应用程序代码的,只需要web.config中的一个条目.

MyHttpModule"

ConfigTest.HttpModule.MyHttpModule,ConfigTest.HttpModule"

/httpModules>

和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;

AddBeginRequestbyMyHttpModule!

我们只是在每个页面上添加了一句话:

看结果:

HttpModule测试

Location节点是用来指定子配置的资源。

如果在应用程序中想对某个目录做特殊处理,则可以用该节点来实现。

举两个例子。

下面的代码示例演示如何仅将指定页的上载文件大小限制设置为128KB。

locationpath="

UploadPage.aspx"

httpRuntimemaxRequestLength="

128"

/location>

为指定目录的图片加水印:

images"

addverb="

path="

*.jpg"

ImageHandler"

--图片水印设置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()

ConfigurationSectionsection=config.Sectio

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1