头一低,很多年都这样过去了...

欢迎来到Kittow的部落格! - http://blog.skyhe.com

Agile Web Development (敏捷Web开发)

Want to Know Something More? Move Your Mouse Here;)

我是天空的一片云,偶尔投影在你的波心,你记得也好,最好你忘掉,你我在交汇时,互放的光亮。
——徐志摩《偶然》 More...

我的VOA听写积分

2006-3-20 [返回]
(.Net)采用HttpModules来重写URLs
采用HttpModules来重写URLs(原理篇)
据说通过HttpModules可以将类似于:http://www.infotouch.cn/detail.aspx?id=120 的URL地址重写为:http://www.infotouch.cn/detail/120.aspx 。这样最直接的好处就是可以让搜索引擎搜索到页面,因为搜索引擎对?之后的参数不太理睬。
http://dev.csdn.net/article/83/83139.shtm

采用HttpModules来重写URLs(实践篇)
首先写一个处理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注册。
http://dev.csdn.net/article/83/83140.shtm
转自:天河网 | www.skyhe.com

Posted at 2:6 PM | Comments[0]

转自:天河网 | www.skyhe.com

发表评论
We Used Ajax to Post Your Comment!
本站评论系统采用Ajax技术,无刷新发送评论
您的大名 *   
电子邮件  
5+6=? *(请输入“5+6=?”的结果)
评论内容 *