在ASP.NET中使用Global.asax文件

在asp.net中使用global.asax文件
global.asax 文件,有时候叫做 asp.net 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法。你可以使用这个文件实现应用程序安全性以及其它一些任务。下面让我们详细看一下如何在应用程序开发工作中使用这个文件。

概述

global.asax 位于应用程序根目录下。虽然 visual studio .net 会自动插入这个文件到所有的 asp.net 项目中,但是它实际上是一个可选文件。删除它不会出问题――当然是在你没有使用它的情况下。.asax 文件扩展名指出它是一个应用程序文件,而不是一个使用 aspx 的 asp.net 文件。

global.asax 文件被配置为任何(通过 url 的)直接 http 请求都被自动拒绝,所以用户不能下载或查看其内容。asp.net 页面框架能够自动识别出对global.asax 文件所做的任何更改。在 global.asax 被更改后asp.net 页面框架会重新启动应用程序,包括关闭所有的浏览器会话,去除所有状态信息,并重新启动应用程序域。

编程

global.asax 文件继承自httpapplication 类,它维护一个httpapplication 对象池,并在需要时将对象池中的对象分配给应用程序。global.asax 文件包含以下事件:

·applicati 对象实例,它都会被调用。

·applicati

·applicati

·applicati 类的第一个实例被创建时,该事件被触发。它允许你创建可以由所有httpapplication 实例访问的对象。

·applicati 类的最后一个实例被销毁时,该事件被触发。在一个应用程序的生命周期内它只被触发一次。

·applicati

·applicati

·applicati asp.net 页面框架开始执行诸如页面或 web 服务之类的事件处理程序之前,该事件被触发。

·applicati asp.net 页面框架结束执行一个事件处理程序时,该事件被触发。

·applcati asp.net 页面框架发送 http 头给请求客户(浏览器)时,该事件被触发。

·applicati asp.net 页面框架发送内容给请求客户(浏览器)时,该事件被触发。

·applicati asp.net 页面框架得到与当前请求相关的当前状态(session 状态)时,该事件被触发。

·applicati asp.net 页面框架执行完所有的事件处理程序时,该事件被触发。这将导致所有的状态模块保存它们当前的状态数据。

·applicati asp.net 页面框架完成一个授权请求时,该事件被触发。它允许缓存模块从缓存中为请求提供服务,从而绕过事件处理程序的执行。

·applicati asp.net 页面框架完成事件处理程序的执行时,该事件被触发,从而使缓存模块存储响应数据,以供响应后续的请求时使用。

·applicati

·applicati

·sessi web 站点时,该事件被触发。

·sessi web 站点时,该事件被触发。

这个事件列表看起来好像多得吓人,但是在不同环境下这些事件可能会非常有用。

使用这些事件的一个关键问题是知道它们被触发的顺序。applicati 和applicati 事件在应用程序第一次启动时被触发一次。相似地,applicati 和 applicati 事件在应用程序终止时被触发一次。此外,基于会话的事件(sessi 和 sessi

·applicati

·applicati

·applicati

·applicati

·applicati

·applicati

·applicati

·applicati

·<<执行代码>>

·applicati

·applicati

·applicati

·applicati

这些事件常被用于安全性方面。下面这个 c# 的例子演示了不同的global.asax 事件,该例使用applicati 事件来完成通过 cookie 的基于表单(form)的身份验证。此外,applicati 事件填充一个应用程序变量,而sessi 填充一个会话变量。applicati 事件显示一个简单的消息用以说明发生的错误。

protected void applicati sender, eventargs e) {
applicati = "builder.com sample";
}
protected void sessi sender, eventargs e) {
sessi = 0;
}
protected void applicati sender, eventargs e) {
// extract the forms authentication cookie
string cookiename = formsauthentication.formscookiename;
httpcookie authcookie = context.request.cookies[cookiename];
if(null == authcookie) {
// there is no authentication cookie.
return;
}
formsauthenticati authticket = null;
try {
authticket = formsauthentication.decrypt(authcookie.value);
} catch(exception ex) {
// log exception details (omitted for simplicity)
return;
}
if (null == authticket) {
// cookie failed to decrypt.
return;
}
// when the ticket was created, the userdata property was assigned
// a pipe delimited string of role names.
string[2] roles
roles[0] = "one"
roles[1] = "two"
// create an identity object
formsidentity id = new formsidentity( authticket );
// this principal will flow throughout the request.
genericprincipal principal = new genericprincipal(id, roles);
// attach the new principal object to the current httpc object
context.user = principal;
}
protected void applicati sender, eventargs e) {
response.write("error encountered.");
}

这个例子只是很简单地使用了一些global.asax 文件中的事件;重要的是要意识到这些事件是与整个应用程序相关的。这样,所有放在其中的方法都会通过应用程序的代码被提供,这就是它的名字为global 的原因。

这里是前面的例子相应的 vb.net 代码:

sub applicati sender as object, byval e as eventargs)
applicati = "builder.com sample"
end sub
sub sessi sender as object, byval e as eventargs)
sessi = 0
end sub
sub applicati sender as object, byval e as
eventargs)
' extract the forms authentication cookie
dim cookiename as string
cookiename = formsauthentication.formscookiename
dim authcookie as httpcookie
authcookie = context.request.cookies(cookiename)
if (authcookie is nothing) then
' there is no authentication cookie.
return
end if
dim authticket as formsauthenticati
authticket = nothing
try
authticket = formsauthentication.decrypt(authcookie.value)
catch ex as exception
' log exception details (omitted for simplicity)
return
end try
dim roles(2) as string
roles(0) = "one"
roles(1) = "two"
dim id as formsidentity
id = new formsidentity(authticket)
dim principal as genericprincipal
principal = new genericprincipal(id, roles)
' attach the new principal object to the current httpc object
context.user = principal
end sub
sub applicati sender as object, byval e as eventargs)
response.write("error encountered.")
end sub

资源

global.asax 文件是 asp.net 应用程序的中心点。它提供无数的事件来处理不同的应用程序级任务,比如用户身份验证、应用程序启动以及处理用户会话等。你应该熟悉这个可选文件,这样就可以构建出健壮的asp.net 应用程序。

你可能感兴趣的:(.net,职场,asp,休闲)