程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> MVC系列(10) MVC為什麼不再需要注冊通配符(*.*)了

MVC系列(10) MVC為什麼不再需要注冊通配符(*.*)了

編輯:關於ASP.NET

很多教程裡都提到了,在部署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。

本欄目

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

EnableExtensionlessUrls沒定義或者是設置值為1。

v4.0 aspnet_filter.dll正常注冊到到IIS上作為ISPAI篩選器。

v4.0 aspnet_isapi.dll處理.axd擴展名的請求,也就是.axd映射到 aspnet_ISPAI.dll上。

v4.0 aspnet_isapi.dll在ISPAI限制列表裡設置為允許Allowed。

網站設置為可讀,並且有腳本權限。

在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功能了。

cnblogs 湯姆大叔

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved