ASP.NET 2.0 URL映射技巧_實用技巧
來源:互聯網
上載者:User
在項目中經常要進行如下映射
將
http://onewww.net/a.aspx?name=llinzzi
映射到
http://onewww.net/llinzzi
首先要解決2個問題
第一是支援萬用字元的映射 URL映射是asp.net2.0新增的功能,不支援萬用字元
於是採用了NBEAR的 NBear.Web.Modules.UrlRewriteRules 進行萬用字元映射
<?xml version="1.0"?>
<!--
注意: 除了手動編輯此檔案以外,您還可以使用
Web 管理工具來配置應用程式的設定。可以使用 Visual Studio 中的
“網站”->“Asp.Net 配置”選項。
設定和注釋的完整列表在
machine.config.comments 中,該檔案通常位於
\Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<section name="UrlRewriteRules" type="NBear.Web.Modules.UrlRewriteRules, NBear.Web"/>
</configSections>
<UrlRewriteRules>
<Rule key="/(.*)/" value="/a.aspx?name=$1" />
<Rule key="/(.*)" value="/a.aspx?name=$1" />
</UrlRewriteRules>
<appSettings/>
<system.web>
<sessionState timeout="200" />
<httpModules>
<add type="NBear.Web.Modules.UrlRewriteModule, NBear.Web" name="UrlRewriteModule"/>
</httpModules>
<!--
設定 compilation debug="true" 將偵錯符號插入
已編譯的頁面中。但由於這會
影響效能,因此只在開發過程中將此值
設定為 true。
-->
<compilation debug="true" defaultLanguage="c#" />
<!--
通過 <authentication> 節可以配置 ASP.NET 使用的
安全身分識別驗證模式,
以標識傳入的使用者。
-->
<authentication mode="Windows"/>
<!--
如果在執行請求的過程中出現未處理的錯誤,
則通過 <customErrors> 節可以配置相應的處理步驟。具體說來,
開發人員通過該節可以配置
要顯示的 html 錯誤頁
以代替錯誤堆疊追蹤。
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
</system.web>
</configuration>
vs2005裡進行測試成功,但放到IIS裡失敗
檢查了幾次,沒發現問題,仔細想了想
先了下,iis的工作流程應該是遇到.aspx副檔名,交給.net處理,然後才能調用httpModules進行url映射
http://onewww.net/llinzzi
沒有aspx副檔名,所以iis直接當成檔案架,返回404錯誤了
而vs2005裡的調試web伺服器把所有的請求都發給了.net處理,所以成功.
於是更改映為
<Rule key="/(.*)/index.aspx" value="/a.aspx?name=$1" />
瀏覽
http://onewww.net/llinzzi/index.aspx
測試成功.
開心,把index.aspx設定成預設文件
測試http://onewww.net/llinzzi/ 結果還是404錯誤
想了下iis認為llinzzi檔案夾不存在,自然就沒用預設文件去訪問
鬱悶,想了很多方法,均失敗
難道要用 llinzzi/index.html訪問?難道要產生真是存在的檔案夾?
都不是理想的方案
在嘗試從iis裡的主目錄裡的配置裡修改isapi來實現用檔案夾對iis的解析的時候,突然發現windows2003伺服器上的iis7對比我工作機xp上的iis6多了一個名為
萬用字元應用程式對應 的設定,眼睛一亮..有戲,第一名字聽起來有門,第二2003本來就是為.net打造的.於是點插入,
輸入 c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
測試,成功!
搜尋了下關於 萬用字元應用程式對應 的資料
安裝萬用字元應用程式對應
在 IIS 6.0 中,管理員可以在每次開始對網站或虛擬目錄發送請求時,將該網站或虛擬目錄配置為運行 Internet 伺服器 API (ISAPI),而不管所請求檔案的副檔名。
當 IIS Web 伺服器接受到來自用戶端的請求時,Web 伺服器會查看在請求中命名的副檔名,以確定有哪一個 ISAPI 或公用網關介面 (CGI) 應用程式來處理該檔案。例如,如果請求名為 Default.asp 的網頁時,IIS 可以從應用程式對應列表中知道 Default.asp 由 Asp.dll ISAPI 應用程式處理。
如果想在所請求的頁面發送到映射的應用程式前對每次用戶端請求執行特定的任務,可以編寫一個 ISAPI 篩選器在請求到達時將其截獲。但是,ISAPI 篩選器具有以下限制:
它們不能訪問請求主體,而只訪問頭。
它們只能在每個網站配置,而不能在每個虛擬目錄配置。
它們不應包含長期啟動並執行操作,因為 ISAPI 篩選器是同步進行的。
它們的靈活性較小,因為 ISAPI 篩選器 API 的功能比 ISAPI 擴充 API 少,後者用於編寫 ISAPI 應用程式。
它們在時間上難以管理。
它們是事件驅動的。
通過使用萬用字元應用程式對應,您可以在所請求的頁面發送到其映射應用程式之前截獲每個請求。其效果就像擁有處理每個檔案名稱擴充的應用程式對應。這就是使用“萬用字元”來命名這一功能的原因。使用萬用字元應用程式對應的應用程式只能是 ISAPI 應用程式。
用戶端請求採用以下路由:
傳入的請求由安裝在根網站上的任何現有的 ISAPI 篩選器處理。ISAPI 篩選器依次執行。
請求被發送到任何現有的萬用字元應用程式對應的應用程式,這些程式也是依次執行的。如果傳入的請求是對虛擬目錄中的 Web 檔案進行請求的,且萬用字元應用程式對應已安裝在了該虛擬目錄和根網站上,那麼只有安裝在該虛擬目錄的萬用字元應用程式對應才被執行。如果該虛擬目錄上沒有安裝萬用字元應用程式對應,則將執行安裝在網站上的萬用字元應用程式對應。換句話說,萬用字元應用程式對應只在所請求的 Web 檔案所處的應用程式中不存在映射時才會被繼承。
IIS 伺服器會查看應用程式對應表,以確定由哪個 ISAPI 應用程式或 CGI 指令碼專門處理所請求的檔案。
每個階段都可以附加響應,然後傳回給用戶端。
使用萬用字元應用程式對應
萬用字元應用程式對應可以在以下方案中使用:
高安全性 Web 應用程式(如銀行業應用程式)要求對每個提出請求的使用者根據使用者名稱、密碼和帳戶號資料庫進行身分識別驗證。例如,一旦使用者通過了身分識別驗證,將會建立規定使用者可以訪問哪些資訊的特定規則。如果萬用字元應用程式對應確定使用者不具有相應權利,它可以阻止請求的進一步訪問,或將請求發送到所請求的網頁以外的網頁。這種自訂的身分識別驗證和授權方案可以在 ISAPI 應用程式中執行,並安裝為萬用字元應用程式對應。這樣,所有使用者必須通過身分識別驗證,不考慮他們所請求的檔案的副檔名。
針對單個使用者的廣告電子商務網站。例如,當返回使用者所提出的請求時,萬用字元應用程式對應應用程式將檢查他們的身份,然後查詢他們以前已觀看或購買的項目。一旦萬用字元指令碼映射將控制傳送到被請求的頁面,就可以顯示適合該使用者的廣告。
要點 您必須是本機電腦上 Administrators 組的成員或者必須被委派了相應的許可權,才能執行下列步驟。作為安全性的最佳操作,請使用不屬於 Administrators 組的帳戶登入電腦,然後使用運行方式命令以管理員身份運行 IIS 管理器。在命令提示字元下,鍵入 runas /user:administrative_accountname "mmc %systemroot%\system32\inetsrv\iis.msc"。
將萬用字元應用程式對應添加到 Web 伺服器或網站
在 IIS 管理器中,展開本機電腦,展開“網站”檔案夾,按右鍵所需的網站或虛擬目錄,然後單擊“屬性”。
單擊相應的選項卡:“主目錄”、“虛擬目錄”、或“目錄”。
在“應用程式設定”地區中,單擊“配置”,然後單擊“映射”選項卡。
要安裝萬用字元應用程式對應,請進行以下操作:
在“映射”選項卡上,單擊“插入”。
在“可執行檔”文字框中鍵入 DLL 的路徑或單擊“瀏覽”以找到該檔案,如果該 DLL 檔案是指令碼引擎,選擇“應用程式引擎”複選框,然後單擊“確定”。
要編輯或刪除萬用字元應用程式對應,請進行以下操作:
在“應用程式擴充”列表中,單擊想更改的指令碼映射。
單擊“編輯”變更指令碼映射,或單擊“刪除”刪除指令碼映射。
要更改萬用字元應用程式執行的順序,在“萬用字元應用程式對應(執行順序)”框中重新安排萬用字元應用程式對應,其方法是單擊“上移”或“下移”按鈕直到符合您想要的順序為止。
注意 請不要在萬用字元應用程式對應列表中多次列出同一應用程式。