采用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注冊。
轉載于:https://www.cnblogs.com/yzxchoice/archive/2006/08/07/469717.html
總結
以上是生活随笔為你收集整理的采用HttpModules来重写URLs(实践篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 删除不同粒度的事实表记录中重复的度量值数
- 下一篇: 如何根据用户权限屏蔽或显示SAP的订单中