采用HttpModules来重写URLs

转载 2004年10月29日 16:55:00

(实践篇)

[日期:2004-10-27] 来源:http://www.cnblogs.com/rrooyy/  作者:简单生活 [字体: ]

首先写一个处理URLs重写的类,并且这个类必须继承IHttpHandler接口,以博客园的程序为例:

public class UrlReWriteModule : System.Web.IHttpModule
{
    public void Init(HttpApplication context)
    {
       context.BeginRequest +=new EventHandler(context_BeginRequest);
    }

   public void Dispose()
   {
   }
}

UrlReWriteModule类就是处理URLs重写的类,继承IHttpHandler接口,实现该接口的两个方法,Init和Dispose。在Init方法里注册自己定义的方法,如上例所示:

content.BeginRequest +=new EventHandler(content_BeginRequest);

BeginRequest是一个事件,在收到新的Http请求时触发,content_BeginRequest就是触发时处理的方法。另外说明一点,HttpModules能注册的方法还有很多,如:EndRequest、Error、Disposed、PreSendRequestContent等等。

在content_BeginRequest方法中具体处理URLs重写的细节,比如,将 http://www.cnblogs.com/rrooyy/archive/2004/10/24/56041.html 重写为 http://www.cnblogs.com/archive.aspx?user=rrooyy&id=56041 (注:我没有仔细看DuDu的程序,这里只是举例而已)。然后将重新生成的Url用HttpContext.RewritePath()方法重写即可,如下:

private void context_BeginRequest(object sender, EventArgs e)
{
    HttpContext context  = ((HttpApplication)sender).Context;
    // 获取旧的Url
    string url = context.Request.Path.ToLower();
    // 重新生成新的Url
    string newUrl = ...; // 具体过程略
    // 重写Url
    context.RewritePath(newUrl);
}

提醒:newUrl的格式不是http://www.infotouch.com/user/archive.aspx,而是从当前应用程序根目录算起的绝对路径,如:user/archive.aspx,这一点请特别注意。

最后要web.config中注册重写URLs的类,格式如下:

<HTTPMODULES>
   <ADD type="classname,assemblyname" name="modulename"/>
   <REMOVE name="modulename"/>
   <CLEAR />
</HTTPMODULES>

采用<ADD>标签可以注册一个类;<REMOVE>可以移除某个类,如果某个子目录不希望继承父目录的某个Http Module注册,就需要使用这个标签;<CLEAR />可以移除所有的Http Module注册。

采用HttpModules来重写URLs(实践篇)

首先写一个处理URLs重写的类,并且这个类必须继承IHttpHandler接口,以博客园的程序为例:public class UrlReWriteModule : System.Web.IHttpMo...
  • kingwkb
  • kingwkb
  • 2006年03月18日 19:27
  • 1437

采用HttpModules来重写URLs(实践篇)

首先写一个处理URLs重写的类,并且这个类必须继承IHttpHandler接口,以博客园的程序为例:public class UrlReWriteModule : System.Web.IHttpMo...
  • squallffx
  • squallffx
  • 2007年08月04日 11:04
  • 737

采用HttpModules来重写URLs(原理篇+实践)

据说通过HttpModules可以将类似于:http://www.infotouch.cn/detail.aspx?id=120 的URL地址重写为:http://www.infotouch.cn/d...
  • deepbluekk
  • deepbluekk
  • 2006年03月23日 12:33
  • 1163

采用HttpModules来重写URLs(原理篇)

据说通过HttpModules可以将类似于:http://www.infotouch.cn/detail.aspx?id=120 的URL地址重写为:http://www.infotouch.cn/d...
  • kingwkb
  • kingwkb
  • 2006年03月18日 19:26
  • 1386

采用HttpModules来重写URLs(原理篇) +(实践篇)

据说通过HttpModules可以将类似于:http://www.infotouch.cn/detail.aspx?id=120 的URL地址重写为:http://www.infotouch.cn/d...
  • xychen2008
  • xychen2008
  • 2007年05月04日 15:28
  • 485

asp.net httpModules配置注意事项

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.T...
  • suntanyong88
  • suntanyong88
  • 2012年06月11日 14:28
  • 8455

httpModules配置注意事项 .

httpModules>            add name="HelloWorldModule" type="jquerytest.App_code.HelloWorldModule"/>...
  • jimmy0021
  • jimmy0021
  • 2014年04月26日 13:29
  • 3110

asp.net的Http Modules介绍

引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类...
  • u011966339
  • u011966339
  • 2017年03月08日 13:30
  • 158

HttpModule的移除

HttpModule的移除 HttpModule 是个好东西,很多程序都有用到,例如DotText、Asp.Net Forums等,但是有一个问题,当我们将使用了HttpModule 的程序设置为站点...
  • greki
  • greki
  • 2007年10月18日 16:36
  • 724

使用HttpMoudle和IPrincipal实现自定义身份及权限认证

导读:   HttpContext.Current.User用户对象表示用户的安全上下文,代码当前即以该用户的名义运行,包括用户的标识(IIdentity)和它们所属的任何角色。所有用户对象都需要实现...
  • MADfox1983
  • MADfox1983
  • 2008年04月21日 21:58
  • 320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:采用HttpModules来重写URLs
举报原因:
原因补充:

(最多只允许输入30个字)