天天看點

ASP.NET HttpModule URL 重寫 (一)

大家好,又來和大家見面了,此次給大家帶來的URL重寫,關于URL重寫是什麼,有什麼好處,如何重寫,今天我和大家一起分享一下我的經驗

一、URL重寫

        URL重寫就是首先獲得一個進入的URL請求然後把它重新寫成網站可以處理的另一個URL的過程。舉個例子來說,如果通過浏覽器進來的URL是“UserProfile.aspx?ID=1”那麼它可以被重寫成 “UserProfile/1.aspx”。

二、URL重寫優點

          1、有利于百度、谷歌等搜尋引擎收錄于抓取,如果你是網站優化高手的化,這就是基本功了。。。

          2、更具有可讀性,僞裝你的技術實作,讓别人想攻擊你都要有一定的難度!!!

三、如何URL重寫

         1、ASP.NET實作一共有兩種

                   a.利用HttpModule處理request請求中的URL

                   b.利用插件IIS Rewrite 元件實作URL重寫

          2、HttpModule實作URL重寫

                a.手寫看一下HttpModule,下圖清楚的描述了HttpModule在整個頁面請求過程中處于的低位,HttpModule是動态請求必經之路啊。

ASP.NET HttpModule URL 重寫 (一)

               c.案例剖析,讓你深入體會奧妙之處

              第一步:修改如下代碼

               場景:有這樣兩個頁面,資料清單頁和資料詳細頁面,點選清單頁資料進入詳細頁面,我們要做資料清單頁面的連接配接做如下修改

               修改前:<asp:HyperLink ID="hkTitle" runat="server"

                     NavigateUrl='<%# Eval("Id","BookDetail.aspx?id={0}") %>'>資料标題</asp:HyperLink>

               修改後:<asp:HyperLink ID="hkTitle" runat="server"

                     NavigateUrl='<%# Eval("Id","BookDetail_{0}.html") %>'>資料标題</asp:HyperLink>

               第二步:建立HttpModule,代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///DemoModule 的摘要說明
/// </summary>
public class DemoModule:IHttpModule
{
    /// <summary>
    /// 開始處理請求事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    private void context_BeginRequest(object sender,EventArgs args)
    {
        //擷取HttpApplication
        HttpApplication application = sender as HttpApplication;
        //擷取使用者請求的URL
        string oldUrl = application.Request.RawUrl;
        //如果請求中存在“BookDetail”字元進行處理請求
        if (oldUrl.IndexOf("BookDetail") > 0)
        {
            //截取BookDetail之前位置的字元串
            string newUrl = oldUrl.Substring(0, oldUrl.IndexOf("BookDetail"));
            //請求的新字元串為"BookDetail.aspx?bid=XXXXXXXX"
            newUrl = newUrl + "BookDetail.aspx?bid=" + oldUrl.Substring(oldUrl.LastIndexOf("_") + 1,
                (oldUrl.IndexOf(".") - oldUrl.LastIndexOf("_") - 1));
            //将請求中的URL進行重寫
            application.Context.RewritePath(newUrl);
        }
       
       
    }


    public void Dispose()
    {
        throw new NotImplementedException();
    }

    /// <summary>
    /// 初始化事件
    /// </summary>
    /// <param name="context"></param>
    public void Init(HttpApplication context)
    {
        //關聯請求開始事件
        context.BeginRequest +=new EventHandler(context_BeginRequest);
    }

}
           

               第三步:配置HttpModule,在web.config中如下配置

<system.web>        
      <httpModules>
            <add name="DemoModule" type="DemoModule"/>
        </httpModules>
</system.web>
           

               第四步:體驗效果吧

今天就說到這裡吧,還有一個URL重寫的方法,有時間完成,大家趕快體驗一下吧!!!