使用HttpHanlder處理404:File not found的問題
一:場景
出于某種理由,需要由asp.net引擎處理所有可能出現(xiàn)的無效URL的Request。
二:現(xiàn)狀
對于無效URL,一般會由IIS返回404錯誤。當(dāng)然,也可以自定義Custom Error Page,但是在這種情況下,并不能處理原URL所代表的Request的數(shù)據(jù)(如表單數(shù)據(jù))?;蛟S我們想直接在Application_BeginRequest中處理該請求,但是,如果我們的IIS已經(jīng)處理了“Verify that file Exists”,則實(shí)際上該請求根本不會被Application_BeginRequest命中(Fire)。
三:解決方案
1:準(zhǔn)備好web.config,進(jìn)行如下配置:
<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>
有幾點(diǎn)需要說明:
1)熟悉system.web和system.webServer的朋友一定知道,后者是針對iis7及以上的集成模式的配置項(xiàng),如果不滿足此宿主條件,則IIS會自動忽略此配置,采用前者的配置節(jié)點(diǎn)。
2)經(jīng)過此配置后,iis7及以上的集成模式的站點(diǎn)已經(jīng)能夠處理FolderTest路徑下的所有404 Request了。
3)resourceType="Unspecified",是用來處理標(biāo)示處理所有請求的,包括file and folder等等,如果我們處理的是文件url,則不需要此配置屬性。
4)path=”*”,表明這是一個wildcard httphandler。
5)如果我們不是要處理子目錄下所有請求,如上文配置中的FolderTest,而是要處理根目錄下的所有404請求,則去掉location配置節(jié)。
2:現(xiàn)在來處理iis7及以上的集成模式的情況
比如,不幸我們還在使用II6,則應(yīng)該在IIS中配置“Verify that file Exists”為非構(gòu)選狀態(tài)。以iis6為例,我們可進(jìn)行如下操作:
1:)打開站點(diǎn)配置節(jié)點(diǎn)
點(diǎn)擊Configuration之。
2:)然后,在出現(xiàn)的界面中的下半部分,即“Wildcard application maps”部分,點(diǎn)擊“Insert”,出現(xiàn)如下圖:
把a(bǔ)spnet_isapi.dll配置進(jìn)去,然后不要鉤選“Verify that file exists”,OK之。
至此,整個世界清靜了。你可以在你的HttpHandler中處理任何想要的Request的數(shù)據(jù)了,比如表單數(shù)據(jù),哪怕客戶端提交的是一個不存在的URL。
相關(guān)文章
C# IEnumerable和IEnumerator接口淺析
本文主要介紹了C#中IEnumerable和IEnumerator接口的相關(guān)知識,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
C#數(shù)據(jù)庫操作之LINQ to SQL技術(shù)詳解
本文詳細(xì)介紹了LINQtoSQL技術(shù),包括其基本概念、使用方法、動態(tài)創(chuàng)建數(shù)據(jù)庫、插入數(shù)據(jù)、查詢數(shù)據(jù)、更新數(shù)據(jù)和刪除數(shù)據(jù)等操作2024-12-12
C#?Socket數(shù)據(jù)接收的三種實(shí)現(xiàn)方式
本文主要介紹了C#?Socket數(shù)據(jù)接收的三種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
C#獲取所有SQL Server數(shù)據(jù)庫名稱的方法
這篇文章主要介紹了C#獲取所有SQL Server數(shù)據(jù)庫名稱的方法,涉及C#針對sql server數(shù)據(jù)庫的簡單查詢技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
c# winform異步不卡界面的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于c# winform異步不卡界面的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
unity使用射線實(shí)現(xiàn)貼花系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了unity使用射線實(shí)現(xiàn)貼花系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
C#使用log4net結(jié)合sqlite數(shù)據(jù)庫實(shí)現(xiàn)記錄日志
因?yàn)榻Y(jié)構(gòu)化的數(shù)據(jù)庫存儲的日志信息,可以寫專門的軟件讀取歷史日志信息,通過各種條件篩選,可操作性極大增強(qiáng),有這方面需求的開發(fā)人員可以考慮,本文給大家介紹了C#使用log4net結(jié)合sqlite數(shù)據(jù)庫記錄日志,需要的朋友可以參考下2024-10-10



