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