使用HttpHanlder處理404:File not found的問題

來源:互聯網
上載者:User

一:情境

出於某種理由,需要由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,進行如下配置:

複製代碼 代碼如下:<location path="FolderTest">
<system.web>
<httpHandlers>
<add verb="*" path="*" type="YourNamespace.YourHandler"/>
</httpHandlers>
</system.web>
<system.webServer>
<handlers>
<add name="testyou" verb="*" path="*" type="younamespace.youHandler" resourceType="Unspecified"/>
</handlers>
</system.webServer>
</location>

有幾點需要說明:

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:)開啟網站配置節點

點擊Configuration之。

2:)然後,在出現的介面中的下半部分,即“Wildcard application maps”部分,點擊“Insert”,出現如:

把aspnet_isapi.dll配置進去,然後不要鉤選“Verify that file exists”,OK之。

至此,整個世界清靜了。你可以在你的HttpHandler中處理任何想要的Request的資料了,比如表單資料,哪怕用戶端提交的是一個不存在的URL。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.