仲介交易 SEO診斷 淘寶客 雲主機 技術大廳
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 下載