2010-05-18 36 views
31

我有問題試圖在web.config中映射HttpHandler。問題映射HttpHandler - > HTTP錯誤404沒有找到

這是相關的配置位:

<httpHandlers> 
    <add verb="*" path="*.hndlr" type="MyAssembly.MyHandler, MyAssembly" validate="false" /> 
</httpHandlers> 

當我瀏覽到http://localhost/myApp/whatever.hndlr我收到了服務器錯誤404(未找到)。

這是我第一次掛鉤HttpHandler,所以我可能會失去一些東西 - 任何幫助讚賞!

UPDATE

我設法得到它的工作使用這兩種到目前爲止的答案 - 是誰能夠exaplin爲什麼它工作得標答案!

這是我的配置(如果沒有兩個是行不通的 - 我正在IIS7的經典模式

的System.Web:

<httpHandlers> 
    <add verb="*" path="*MyHandler.hndlr" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false"/> 
</httpHandlers> 

System.webserver:

<handlers> 
    <add name="MyHandler" verb="*" path="*MyHandler.hndlr" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"/> 
</handlers> 
+1

對於您的更新,如果您使用的IIS6安裝在System.webserver部分,則將被忽略,因爲這僅用於IIS7集成管道模式。唯一的原因是擁有一個適用於IIS7流水線和calssic模式和IIS6的web.config。 – 2010-05-20 16:22:03

+0

對不起,這是IIS7 - 但這是否改變了事情?如果我刪除了system.webserver部分中的那一部分,它不起作用(404未找到),並且出於兼容性原因我們處於經典模式。 – JohnIdol 2010-05-20 17:07:33

+0

,如果我在system.web中註釋掉一個,我會得到「無法執行URL」 - 它只適用於兩個有趣的原因! :) – JohnIdol 2010-05-20 17:18:22

回答

27

您是否使用IIS7,如果是的話,應用程序池是以傳統還是流水線模式運行?如果是在IIS7流水線模式,則處理參考需要進入下一節

<system.webServer> 
    <handlers> 
    </handlers> 
<system.webServer> 

,而不是在下面的部分。

<system.web> 
    <httpHandlers> 
    </httpHandlers> 
</system.web> 
+0

嘗試過(不得不添加名稱=「MyHandler」屬性) - 看起來很有前途,但現在得到一個不同的錯誤 - > HTTP錯誤500.21-內部服務器錯誤處理程序「MyHandler」在其模塊列表中有一個錯誤的模塊「ManagedPipelineHandler」 – JohnIdol 2010-05-18 15:56:37

+0

回答你的其他問題我運行在經典模式(不流水線) - 這解釋了爲什麼我得到上述評論中描述的錯誤:) – JohnIdol 2010-05-18 16:05:52

+0

@JohnIdol - 你設法讓你的HTTP處理程序工作? – 2010-05-19 15:58:52

4

什麼是您的處理程序的擴展?如果您使用的自定義擴展名爲.hndlr您可能還需要在IIS中添加ScriptMap,並將其指向ASP.NET運行時,以便IIS可以將請求轉發給正確的處理器。


  1. 在IIS7去你的網站
  2. 下IIS組去處理程序映射
  3. 操作點擊添加腳本映射
  4. 設置請求路徑*。 hndlr
  5. 設置路徑到ASP.NET運行時(%windir%\ Microsoft.NET \ Framework64 \ v2.0.5 0727 \ aspnet_isapi.dll)或您正在運行的任何版本。

然後在你的web.config中,你將需要在其他答案中描述的相應部分註冊處理程序。

9

就像那些堅持這個問題的指導,我發現的關鍵屬性是..

resourceType="Unspecified" 

我原本跟着微軟例如設置這和他們有它作爲

resourceType="File" 

剛剛不停地給我404錯誤。我的HTTPHandler正在返回圖形。

希望這有助於:)

+0

謝謝謝謝謝謝謝謝! – 2012-02-06 02:21:12

5

我使用IIS7,解決的辦法是:

在部分

<system.web> 
    <httpHandlers> 
     <add verb="*" path="*.ashx" type="CVOS.MyDocumentHandler"/> 
    </httpHandlers> 
<system.web> 

和部分

<system.webServer> 
    <handlers> 
     <add name="pdfHandler" verb="*" path="*.ashx" type="CVOS.MyDocumentHandler" /> 
    </handlers> 
</system.webServer> 
0

希望我的解決方案將幫助別人。在服務器從IIS6移動到7.5,都是.Net 4.0集成,我有一個Captcha控件,退出工作。事實證明,從<add>節點<system.webserver><handlers>中刪除此屬性preCondition="integratedMode,runtimeVersionv2.0"解決了該問題。

2

如果您已經爲32位設置了處理程序,但是您正在運行64位(反之亦然),那麼也可能會遇到此錯誤。建立兩者並且覆蓋所有基地很容易。

注意「preCondition」和「scriptProcessor」的區別。

<handlers> 
    <add name="MyHandler_32bit" verb="*" path="*MyHandler.hndlr" preCondition="bitness32" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" /> 
    <add name="MyHandler_64bit" verb="*" path="*MyHandler.hndlr" preCondition="bitness64" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" /> 
</handlers> 
0

沒有以前的答案爲我工作。
我使用IIS 8.5, .Net v4.0, Integrated,並仍然得到一個404以下的處理程序配置:

<system.webServer> 
    <handlers> 
     <add name="testEmail" path="*.em" verb="*" type="MyApp.testRazorEmailHandler, MyApp" resourceType="Unspecified" requireAccess="Script" /> 
    </handlers> 
</system.webServer> 


我啓用了跟蹤,發現如下:

116. -HANDLER_CHANGED 

    OldHandlerName    testEmail 
    NewHandlerName    System.Web.Mvc.MvcHandler 
    NewHandlerModules   ManagedPipelineHandler 
    NewHandlerScriptProcessor 
    NewHandlerType    System.Web.Mvc.MvcHandler, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 


正如你所看到的它看起來像它已經正確地拿起使用我的自定義HttpHandler testEmail但請求MVC已經偷走了它的請求
我打開我的路由定義在RouteConfig.cs,發現補充說:

routes.IgnoreRoute("{resource}.em"); 

我把它忽略意味着我的處理程序的請求。
希望這可以幫助別人 - 我正在撕裂我的頭髮!

相關問題