ASPNET管道()
对于一个ASPNET应用来说HttpApplication派生于Globalasax文件我们可以通过创建globalasax文件对HttpApplication的请求处理行为进行定制Globalasax采用一种很直接的方式实现了这样的功能这种方式不是我们常用的方法重写或事件注册而是直接采用方法名匹配在Globalasax中我们按照Application_{Event Name}这样的方法命名规则进行事件注册比如Application_BeginRequest方法用于处理HttpApplication的BeginRequest事件如果通过VS创建一个Globalasax文件将采用如下的默认定义
<%@ Application Language=C# %>
<script runat=server>
void Application_Start(object sender EventArgs e){}
void Application_End(object sender EventArgs e){}
void Application_Error(object sender EventArgs e){}
void Session_Start(object sender EventArgs e){}
void Session_End(object sender EventArgs e){}
</script>
HttpModule
ASPNET拥有一个具有高度可扩展性的引擎并且能够处理对于不同资源类型的请求那么是什么成就了ASPNET的高可扩展性呢? HttpModule功不可没
当请求转入ASPNET管道时最终负责处理该请求的是与请求资源类型相匹配的HttpHandler对象但是在Handler正式工作之前ASPNET会先加载并初始化所有配置的HttpModule对象HttpModule在初始化的过程中会将一些功能注册到HttpApplication相应的事件中在HttpApplication请求处理生命周期中的某个阶段相应的事件会被触发通过HttpModule注册的事件处理程序也得以执行
所有的HttpModule都实现了具有如下定义的SystemWebIHttpModule接口其中Init方法用于实现HttpModule自身的初始化该方法接受一个HttpApplication对象有了这个对象事件注册就很容易了
public interface IHttpModule
{
void Dispose()
void Init(HttpApplication context)
}
ASPNET提供的很多基础功能都是通过相应的HttpModule实现的下面列出了一些典型的HttpModule
OutputCacheModule实现了输出缓存(Output Caching)的功能
SessionStateModule在无状态的HTTP协议上实现了基于会话(Session)的状态
WindowsAuthenticationModule+FormsAuthenticationModule+PassportAuthentication Module实现了WindowsForms和Passport这种典型的身份认证方式
UrlAuthorizationModule + FileAuthorizationModule实现了基于URI和文件ACL(Access Control List)的授权
除了这些系统定义的HttpModule之外我们还可以自定义HttpModule通过Webconfig可以很容易地将其注册到Web应用中
HttpHandler
对于不同资源类型的请求ASPNET会加载不同的Handler来处理也就是说aspx 页面与asmx web 服务对应的Handler是不同的所有的HttpHandler都实现了具有如下定义的接口SystemWebIHttpHandler方法ProcessRequest提供了处理请求的实现
public interface IHttpHandler
{
void ProcessRequest(HttpContext context)
bool IsReusable { get; }
}
某些HttpHandler具有一个与之相关的HttpHandlerFactory它实现了具有如下定义的接口SystemWebIHttpHandlerFactory方法GetHandler用于创建新的HttpHandler或者获取已经存在的HttpHandler
public interface IHttpHandlerFactory
{
IHttpHandler GetHandler(HttpContext context string requestType
string url string pathTranslated)
void ReleaseHandler(IHttpHandler handler)
}
返回目录ASPNET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化让你的Java程序更快更稳定
Visual C++音频/视频技术开发与实战