asp.net地址映射——偽靜態

來源:互聯網
上載者:User

 

  asp.net地址映射 的定義是使用者訪問 的虛擬位址 映射的實際檔案,虛擬位址可能是靜態頁面。如理:在訪問http://fuzhou.naoqiu.com/bus頁面, 其實訪問的是/bus.aspx頁面。

  asp.net地址映射是通過 HttpModule請求原理來完成工作。

  httpModule原理是什麼?

  一 個HTTP請求在HttpModule容器的傳遞過程中,會在某一時刻(ResolveRequestCache事件)將這個HTTP請求傳遞給 HttpHandler容器。在這個事件之後,HttpModule容器會建立一個HttpHandler的入口執行個體,但是此時並沒有將HTTP請求控制 權交出,而是繼續觸發AcquireRequestState事件以及PreRequestHandlerExcute事件。在 PreRequestHandlerExcute事件之後,HttpModule視窗就會將控制權暫時交給HttpHandler容器,以便進行真正的 HTTP請求處理工作。

  而在HttpHandler容器內部會執行ProcessRequest方法來處理HTTP請求。在容器 HttpHandler處理完畢整個HTTP請求之後,會將控制權交還給HttpModule,HttpModule則會繼續對處理完畢的HTTP請求信 息流進行層層的轉交動作,直到返回到用戶端為止。

  

 

  借用博友圖片

  瞭解完原理後,我來完成一個 簡單的地址映射,代碼如下:

  首先先完成地址映射基類:

  ///<summary>

  /// 地址修正

  /// </summary>

 

  public abstract class BaseModuleRewriter: IHttpModule

  {

  /// <summary>

  /// 初始化調用

  /// </summary>

 

  /// <param name="app"></param>

  public virtual void Init(HttpApplication app) {

  app.BeginRequest += new EventHandler(app_BeginRequest);

  }

  public virtual void Dispose() { }

  /// <summary>

  /// 請求開始

  /// </summary>

 

  /// <param name="sender"></param>

  /// <param name="e"></param>

  protected virtual void app_BeginRequest(object sender, EventArgs e)

  {

  HttpApplication app = sender as HttpApplication;

  Rewrite(app);

  }

  /// <summary>

  /// 操作的抽象方法

  /// </summary>

 

  /// <param name="app"></param>

  protected abstract void Rewrite(HttpApplication app);

  }

  繼承基類,完成需要地址映射操作:

  protected override void Rewrite(HttpApplication app)

  {

  HttpContext context = app.Context;

  HttpRequest request = app.Request;

  string part = Regex.Match(request.Url.ToString(), @"(?<=http\:\/\/).*").Value.ToLower().Trim('/');

  if (part.IndexOf("/") == -1)

  {

  part = Regex.Match(part, @"^\w+").Value;

  switch (part)

  {

  case "bus": context.RewritePath("/bus.aspx"); break;

  case "www":

  case "naoqiu": context.RewritePath("/Default.aspx"); break;

  default: context.RewritePath("/Index_City.aspx"); break;

  }

  }

  }

  那麼我們是否還差些什麼? 是的,還差個設定檔的配置。需要修改web.config檔案幾處地方,代碼如:

   <!--請求規則-->

<httpModules>

<add name="BianminModuleRewriter"
type="Bianmin.URLRewriter.ModuleRewriter,Bianmin.URLRewriter" />

</httpModules>

<system.webServer>

<handlers>
<add name="aspnet_isapi" path="*" verb="*" modules="IsapiModule" script Processor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
</handlers>

<defaultDocument>

<files>

<clear />

<add value="default.aspx" />

</files>

</defaultDocument>

</system.webServer>

  注意:當您使用framewore 2..0需要更改\aspnet_isapi.dll檔案路徑

  原始碼下載地址:http://download.naoqiu.com 下載



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.