设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 210|回复: 2
打印 上一主题 下一主题

采用HttpModules来重写URLs

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-16 19:15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先写一个处理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/archive.aspx?user=rrooyy&id=56041 重写为 http://www.cnblogs.com/rrooyy/archive/2004/10/24/56041.。然后将重新生成的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);
}

    最后要web.config中注册重写URLs的类,格式如下:
     <HTTPMODULES>
<ADD type="classname,assemblyname" name="modulename"/>
<REMOVE name="modulename"/>
<CLEAR />
</HTTPMODULES>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 22:44 , Processed in 0.098675 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表