ASP.NET Framework深度历险(2)
Author:uestc95
ArticleType:原创
E-mail:uestc95@263.net
.NET Framework Version:1.0.3705正式版
VS.NET(C#) Version:7.0.9466正式版
刚刚吃完晚饭,正好在键盘上面锻炼一下手指。
接着上回继续写这个“日记”:
Chapter Two -- HttpModule是如何工作的?
我们上回说到,一个来自于客户端的Http Request被截获后经过层层转交(怎么都在踢皮球?呵呵)到达了HttpModule这个“请求监听器”。
HttpModule就类似于安插在ASPNET_WP.EXE进程中的一个窃听器,稍微有些常识的人都会很自然的想象得到窃听器是用来做什么的,而我们的HttpModule
可以说是作窃听器的绝好人选了,但是需要明确的是,HttpModule绝对不是简单的监听器,它可以做到更多的东西,比如它可以对截获的请求增加一些内容
等等。
另外需要明白的是,当一个Http Request到达HttpModule的时候,整个ASP.NET Framework系统还并没有对这个请求做任何的真正处理,但是我们可以
在这个Http Request传递到真正的请求处理中心(HttpHandler)之前附加一些我们需要的信息在这个Http Request至上,或者针对我们截获的这个Http
Request信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的Http Request,从而可以起到一个Filter过滤器的作用,而不仅仅是一个窃听器了。
通过查阅MSDN(不要去相信.NET SDK自带的那个QuickStarts Web文档,正式版本中竟然在很多地方没有更新这个文档,很多东西在正式版本是无效的),
你会发现系统HttpModule实现了一个叫做IHttpModule的接口,很自然的就应当想到,只要我们自己的类能够实现IHttpModule接口,不就可以完全替代系统的
HttpModule了吗?完全正确。
在我们开始自己的HttpModule类之前,我先来告诉你系统中的那个HttpModule是什么样子的,ASP.NET系统中默认的HttpModule有以下几个:
System.Web.Caching.OutputCacheModule
System.Web.SessionState.SessionStateModule
System.Web.Security.WindowsAuthenticationModule
System.Web.Security.FormsAuthenticationModule
System.Web.Security.PassportAuthenticationModule
System.Web.Security.UrlAuthorizationModule
System.Web.Security.FileAuthorizationModule
好了,我们来开始我们自己的HttpModule构建历程吧。
1)打开VS.NET新建一个“Class Library”项目,将它命名为MyHttpModule。
2)引用System.Web.dll文件
在代码区域敲入:
using System;
using System.Web;
namespace MyHttpModuleTest
{
/// <summary>
/// 说明:用来实现自定义HttpModule的类
/// 作者:uestc95
/// 联系:uestc95@263.net
/// </summary>
public class MyHttpModule:IHttpModule
{
/// <summary>
/// 说明:构造器方法
/// 作者:uestc95
/// 联系:uestc95@263.net
/// </summary>
public MyHttpModule()
{
}
/// <summary>
/// 说明:实现IHttpModule接口的Init方法
/// 作者:uestc95
/// 联系:uestc95@263.net
/// </summary>
/// <param name="application">HttpApplication类型的参数</param>
&nbs