大部分url重寫的需求是僞靜態,固然有不少第三方開源組件,可是這種需求的核心方法其實就是context.rewritePath()web
要是系統像ARR那樣,用重寫作代理和反向代理,通常的重寫就不行了,context.rewritePath()的內部不容許跨站點的url。url
你可能會想到實現本身的IHttpHandler,這樣有個問題就是,靜態資源的url無法重寫。spa
那怎麼辦?代理
我經過查context.rewritePath()內部方法是:code
[DllImport("webengine4.dll", CharSet = CharSet.Unicode)] internal static extern int MgdRewriteUrl(IntPtr pRequestContext, string pszUrl, bool fResetQueryString);
這個方法的關鍵是怎麼獲取到當前請求上下文context的句柄?blog
靜態資源重寫的關鍵問題是怎麼捕獲到靜態資源的請求?資源
<system.webServer> <handlers> <remove name="StaticFile" />
這樣就能夠在IHttpHandler中捕獲靜態資源的請求了
我嘗試實現ARR的擴展程序,註冊GAC後,找不到註冊的DLLrem