MVC之前的那點事兒系列(10):MVC為什么不再需要注冊通配符(*.*)了?


文章內容

很多教程里都提到了,在部署MVC程序的時候要配置通配符映射(或者是*.mvc)到aspnet_ISPAI.dll上,在.NET4.0之前確實應該這么多,但是.NET4.0之后已經不要再費事了,因為它默認就支持了。

 

你可以會問,沒有映射配置,請求這么可能會走到aspnet_ISPAI.dll上呢?對,這就是我們本章節要講的一個東西:ASP.NET 4 Extensionless URL feature,因為在ASP.NET4之后,默認所有的請求都轉向到aspnet_ISPAI.dll,那么在IIS6上它是如何實現的呢?首先ASP.NET4.0安裝的時候會自動安裝一個aspnet_filter.dll ,這是一個ISAPI篩選器,該篩選器在請求處理之前,會將所有的URL地址附加上/eurl.axd/GUID字符串,而默認情況下*.axd擴展名是映射到aspnet_isapi.dll上的,所以當我們附加/eurl.axd/GUID字符串以后,所有的請求都可以被aspnet_isapi.dll來處理了,當進入ASP.NET的時候的時候又把該/eurl.axd/GUID 字符串刪除了(這個周期非常早),以便還原成原來的URL地址。.NET框架根目錄下的web.config默認設置請求是DefaultHttpHandler來處理的,因為它的path=”*”,並且放在httpHandlers的第一個位置上(除非你修改了設置),此后DefaultHttpHandler將這個請求轉發(不是URL跳轉哦)至IIS上,這時候我們的篩選器不會再附加/eurl.axd/GUID字符串了,接下來就是正常的處理請求了,如果你想利用此特性做其它特殊的事情,那你需要在MapRequestHandler事件執行之前,修改DefaultHttpHandler為其它的HttpHandler。

有一點需要注意的是,IIS7集成模式下,處理請求的默認Handler是不是DefaultHttpHandler而是TransferRequestHandler,兩個Hanlder是差不多的,具體的細節不同不在我們討論的范疇,我們就不多說了,這些handler默認是隨.NET4.0安裝的時候一起安裝,但是IIS7默認是不啟用這個功能的,只有在安裝了IIS7的QFE才能使用,QFE包含在service pack中,QFE獨立下載地址為http://support.microsoft.com/kb/980368。

 

另外,要保持這個功能正常使用的話,下列設置需要滿足條件:

  1. EnableExtensionlessUrls沒定義或者是設置值為1。
  2. v4.0 aspnet_filter.dll正常注冊到到IIS上作為ISPAI篩選器。
  3. v4.0 aspnet_isapi.dll處理.axd擴展名的請求,也就是.axd映射到 aspnet_ISPAI.dll上。
  4. v4.0 aspnet_isapi.dll在ISPAI限制列表里設置為允許Allowed。
  5. 網站設置為可讀,並且有腳本權限。

在IIS6上要想禁用這個功能,修改注冊表文件HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\EnableExtensionlessUrls為0就可以實現,因為IIS只有重啟的時候才加載這個配置,所以需要重啟一下才能生效。Wow64下(比如64為OS下允許32位worker process)則需要設置HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\4.0.30319.0\EnableExtensionlessUrls為0.

 

IIS 6, ASP.NET 4, 和ASP.NET MVC 3可以成功使用上述功能(甚至MVC2也可以,MVC1未測試),所以,以后在ASP.NET4.0上部署站點的時候,不必再設置通配符映射就可以使用MVC3功能了。

參考資料:

http://haacked.com/archive/2010/12/22/asp-net-mvc-3-extensionless-urls-on-iis-6.aspx

http://blogs.msdn.com/b/tmarq/archive/2010/06/18/how-to-disable-the-asp-net-v4-0-extensionless-url-feature-on-iis-6-0.aspx

http://blogs.msdn.com/b/tmarq/archive/2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4.aspx

同步與推薦

本文已同步至目錄索引:MVC之前的那點事兒系列

MVC之前的那點事兒系列文章暫時結束,關於MVC正式的部分,希望有時間陸續貼上來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM