您的位置:首页 > 理论基础 > 计算机网络

HttpModule的认识与深入理解

2009-12-29 12:41 381 查看
HttpModule是向实现类提供模块初始化和处置事件。当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。

首先你要实现IHttpModule接口这个接口只有两个方法,一个是Init方法一个Dispose方法.

Code
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// UrlReWriteHttpModule 的摘要说明
/// </summary>
public class UrlReWriteHttpModule : IHttpModule
{
public UrlReWriteHttpModule()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

#region IHttpModule 成员

public void Dispose()
{
throw new Exception("The method or operation is not implemented.");
}

public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
HttpContext context = (sender as HttpApplication).Context;
//string Url1 = context.Request.Path;
//string Url2 = context.Request.PathInfo;
//string Url3 = context.Request.Url.ToString();
//得到整个的网络地址
string fullOrigionalpath = context.Request .Url.ToString();

if (fullOrigionalpath.Contains("/Books.aspx"))
{
context.RewritePath("Products.aspx?Category=Books");//重写地址,重写后地址栏中的显示不变,但是真正返回的页面是被重写的页面
}
else if (fullOrigionalpath.Contains("/DVDs.aspx"))
{
context.RewritePath("Products.aspx?Category=DVDs");
}
else if (fullOrigionalpath.Contains("/DVDs.aspx"))
{
context.RewritePath("Products.aspx?Category=CDs.aspx");
}
}

#endregion
}

注册web.config事件

-------------------------------------------------完成------------------------------------------------

从上面的例子看出,其实是一个好简单的实现方法,就是在init中注册处理过程事件,把代码写完后,在web.congif中HttpModules注册就完成了.

开发程序千变万变, 通过这一方法可以编写出好多合适自己用的功能,这需要大家去实践了. 收集与整理,且当成长的回忆.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: