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

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

 

  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 下載