一:場景
出于某種理由,需要由asp.net引擎處理所有可能出現的無效URL的Request。
二:現狀
對于無效URL,一般會由IIS傳回404錯誤。當然,也可以自定義Custom Error Page,但是在這種情況下,并不能處理原URL所代表的Request的資料(如表單資料)。或許我們想直接在Application_BeginRequest中處理該請求,但是,如果我們的IIS已經處理了“Verify that file Exists”,則實際上該請求根本不會被Application_BeginRequest命中(Fire)。
三:解決方案
1:準備好web.config,進行如下配置:
<a></a>
有幾點需要說明:
1)熟悉system.web和system.webServer的朋友一定知道,後者是針對iis7及以上的內建模式的配置項,如果不滿足此宿主條件,則IIS會自動忽略此配置,采用前者的配置節點。
2)經過此配置後,iis7及以上的內建模式的站點已經能夠處理FolderTest路徑下的所有404 Request了。
3)resourceType="Unspecified",是用來處理标示處理所有請求的,包括file and folder等等,如果我們處理的是檔案url,則不需要此配置屬性。
4)path=”*”,表明這是一個wildcard httphandler。
5)如果我們不是要處理子目錄下所有請求,如上文配置中的FolderTest,而是要處理根目錄下的所有404請求,則去掉location配置節。
2:現在來處理iis7及以上的內建模式的情況
比如,不幸我們還在使用II6,則應該在IIS中配置“Verify that file Exists”為非構選狀态。以iis6為例,我們可進行如下操作:
1:)打開站點配置節點
<a href="http://professionalaspnet.com/images/WildcardMapping1.png"></a>
點選Configuration之。
2:)然後,在出現的界面中的下半部分,即“Wildcard application maps”部分,點選“Insert”,出現如下圖:
<a href="http://professionalaspnet.com/images/WildcardMapping3.png"></a>
把aspnet_isapi.dll配置進去,然後不要鈎選“Verify that file exists”,OK之。
至此,整個世界清靜了。你可以在你的HttpHandler中處理任何想要的Request的資料了,比如表單資料,哪怕用戶端送出的是一個不存在的URL。
本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/archive/2013/03/04/2942554.html,如需轉載請自行聯系原作者