概述
我们知道HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。
HttpHandler与HttpModule简单来说其实都是对一个请求上下文的处理,但它们两个所处的功能角色是完全不一样的.
SimpleHttpModule 类的代码如下:
using System;
using System.Text;
using System.Web;
namespace Phone.HttpModule
{
/// <summary>
/// SimpleHttpModule 的摘要说明。
/// </summary>
public class SimpleHttpModule : IHttpModule
{
#region IHttpModule 成员
public void Dispose()
{ }
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
void context_AcquireRequestState(object sender, EventArgs e)
{
// 获取应用程序
HttpApplication application = (HttpApplication)sender;
if(application.Context.Request.Url != null)
{
application.Response.Write(application.Context.Request.Url.ToString());
application.Response.End();
}
if(application.Context.Request.UrlReferrer != null)
{
application.Response.Write(application.Context.Request.UrlReferrer.ToString());
}
// // 检查用户是否已经登录
// if (application.Context.Session["UserName"] == null || application.Context.Session["UserName"].ToString().Trim() == "")
// {
// // 获取Url
// string requestUrl = application.Request.Url.ToString();
// string requestPage = requestUrl.Substring(requestUrl.LastIndexOf('/') + 1);
// // 如果请求的页面不是登录页面,刚重定向到登录页面。
// if (requestPage != "Login.aspx")
// application.Server.Transfer("Login.aspx");
// }
// else
// {
// // 已经登录,向每个请求的页面打印欢迎词。
// application.Response.Write(string.Format("欢迎您!{0}!", application.Context.Session["UserName"]));
// }
}
#endregion
}
}
最后在应用此类的web 项目中要添加应用,并在web.config中加入如下配置
<httpModules>
<add type="Phone.HttpModule.SimpleHttpModule,Phone.HttpModule" name="SimpleHttpModule" />
</httpModules>
type="Phone.HttpModule.SimpleHttpModule,Phone.HttpModule" 命名空间.类名,命名空间, name=类名 就行了
这是基本的一个处理过程,要实现其它复杂的业务逻辑可以加在里面了