首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

MVC 系列(10):為何 ASP.NET 4.0 後無需註冊通配符映射

     編輯:關於ASP.NET

許多教學都提到,部署 MVC 專案時需在 IIS 中設定通配符映射(或 *.mvc)指向 aspnet_isapi.dll。這在 .NET 4.0 之前確實必要,但 .NET 4.0 之後已內建支援,不再需要手動設定。

你可能會好奇:沒有映射設定,請求如何傳遞給 aspnet_isapi.dll?這正是 ASP.NET 4 引入的 Extensionless URL feature。從 ASP.NET 4 開始,預設所有請求都會導向 aspnet_isapi.dll。在 IIS 6 上,這是透過安裝時自動註冊的 aspnet_filter.dll(ISAPI 篩選器)實現:它在請求處理前,將所有 URL 附加 /eurl.axd/GUID 字串;由於 *.axd 預設映射到 aspnet_isapi.dll,請求便能進入 ASP.NET 管線。進入後,該字串會在極早期被移除,還原原始 URL。

.NET 框架根目錄下的 web.config 預設由 DefaultHttpHandler(path="*")處理請求,它會將請求轉發(非重導向)回 IIS,此時篩選器不再附加字串,進入正常處理流程。若需在 MapRequestHandler 事件前自訂處理,可替換 DefaultHttpHandler。

IIS 7 整合模式差異

IIS 7 整合模式下,預設處理常式為 TransferRequestHandler(而非 DefaultHttpHandler),兩者功能相似。此功能隨 .NET 4.0 安裝,但 IIS 7 預設未啟用,需安裝 QFE(包含於 Service Pack,或獨立下載 KB980368)。

維持功能正常的必要條件

  • EnableExtensionlessUrls 未定義或值為 1。
  • v4.0 aspnet_filter.dll 正常註冊為 ISAPI 篩選器。
  • v4.0 aspnet_isapi.dll 處理 .axd 擴展名請求。
  • v4.0 aspnet_isapi.dll 在 ISAPI 限制清單中設為允許。
  • 網站具備讀取與腳本執行權限。

停用方式

IIS 6 可修改登錄 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\EnableExtensionlessUrls 為 0(Wow64 下對應 Wow6432Node 路徑),重啟 IIS 生效。

綜上,ASP.NET 4.0、MVC 3(甚至 MVC 2)均可利用此特性,部署時無需再設定通配符映射即可使用 MVC 功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved