程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> asp.net URL重寫(URLRewriter)之簡化版

asp.net URL重寫(URLRewriter)之簡化版

編輯:關於ASP.NET

在 asp.net 裡實現 URL重寫(URLRewriter)的一個最簡單的方法。

參考了 (作者 Scott Mitchell 翻譯:Janssen )的大作,雖然沒有完全看明白,但是也照貓畫虎地做了一個,頗有“成就”感。寫出來分享一下。

原作裡講了很多的原理,這裡就不說了(其實我也不懂)。這裡就寫操作過程吧。目的是實現一個最簡單的能實現 URL重寫 的程序。

1、需要設置一下IIS裡的站點屬性。

2、修改web.config的內容。

<system.web>
   <httpHandlers>
    <add verb="*" path="*.zhtml" type="ZDIL.URLRewriter.RewriterFactoryHandler, ZDILURLRewriter" />
  </httpHandlers>
</system.web>

其中*.zhtml 就是地址欄裡面寫的網頁的擴展名,就是給用戶看的,這個可以隨意改(但是要符合擴展名的規則!)。當然要和第一步裡面的設置相一致才行。

3、寫一個類。

using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace ZDIL.URLRewriter
{
  /**//// <summary>
  /// URL重寫
  /// </summary>
  public class RewriterFactoryHandler : IHttpHandlerFactory
  {
    /**//// <summary>
    /// GetHandler is executed by the ASP.NET pipeline after the associated HttpModules have run. The job of
    /// GetHandler is to return an instance of an HttpHandler that can process the page.
    /// </summary>
    /// <param name="context">The HttpContext for this request.</param>
    /// <param name="requestType">The HTTP data transfer method (<b>GET</b> or <b>POST</b>)</param>
    /// <param name="url">The RawUrl of the requested resource.</param>
    /// <param name="pathTranslated">The physical path to the requested resource.</param>
    /// <returns>An instance that implements IHttpHandler; specifically, an HttpHandler instance returned
    /// by the <b>PageParser</b> class, which is the same class that the default ASP.NET PageHandlerFactory delegates
    /// to.</returns>
    public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
    {
      string sendToUrl = url; //地址欄裡面的地址
      string filePath = pathTranslated;
      string sendToURLString = "/web/index.aspx"; //真正要訪問的頁面
      string queryString = "";  //參數。比如 ?id=123
      filePath = context.Server.MapPath(sendToURLString); //物理地址
      //這句最重要了。轉向了。
      context.RewritePath(sendToURLString, String.Empty, queryString);
      //這個還沒有弄明白 :)
      return PageParser.GetCompiledPageInstance(url, filePath, context);
    }
    public virtual void ReleaseHandler(IHttpHandler handler)
    { //這個也不懂了
    }
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved