web-dev-qa-db-de.com

Problemzuordnung HttpHandler -> HTTP-Fehler 404 nicht gefunden

Ich habe Probleme beim Versuch, einen HttpHandler in der web.config zuzuordnen.

Dies ist das relevante Konfigurationsbit:

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

Wenn ich zu http://localhost/myApp/whatever.hndlr navigiere, erhalte ich einen Serverfehler 404 (nicht gefunden).

Es ist das erste Mal, dass ich einen HttpHandler anschließe, so dass ich etwas vermisse - jede Hilfe ist dankbar!

UPDATE:

Ich habe es geschafft, es mit beiden Antworten zum Laufen zu bringen - wer weiß, warum es funktioniert, erhält die Antwort!

Dies ist meine Konfiguration (funktioniert nicht, wenn beide nicht vorhanden sind - ich lasse IIS7 im klassischen Modus laufen )

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>
32
JohnIdol

Verwenden Sie IIS7, wenn der Anwendungspool im klassischen Modus oder im Pipeline-Modus ausgeführt wird? Wenn sich IIS7 im Pipeline-Modus befindet, muss die Handlerreferenz in den folgenden Abschnitt aufgenommen werden

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

anstatt im folgenden Abschnitt. 

<system.web>
    <httpHandlers>
    </httpHandlers>
</system.web>
27
Ben Robinson

Nur als Leitfaden für diejenigen, die an diesem Problem festhielten, fand ich das entscheidende Attribut, das sein sollte.

resourceType="Unspecified"

Ich war ursprünglich einem Microsoft-Beispiel gefolgt, um dies einzurichten, und sie hatten es als

resourceType="File"

das gab mir immer 404 Fehler. Mein HTTPHandler gibt Grafiken zurück.

Hoffe das hilft :)

9
CResults

ich verwende IIS7, die Lösung ist:

im Abschnitt 

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

und abschnitt

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

Was ist die Erweiterung Ihres Handlers? Wenn Sie eine benutzerdefinierte Erweiterung wie .hndlr verwenden, müssen Sie möglicherweise eine ScriptMap in IIS hinzufügen und auf die ASP.NET-Laufzeit verweisen, damit IIS Weiterleiten kann die Anfrage an den richtigen Prozessor.


  1. In IIS7 gehen Sie zu Ihrer Website
  2. Gehen Sie in der Gruppe IIS zu Handler-Zuordnungen.
  3. Klicken Sie unter Actions auf Add Script Map.
  4. Stellen Sie den Anforderungspfad auf * .hndlr ein
  5. Legen Sie Path für die ASP.NET-Laufzeitumgebung (% windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll) oder für die von Ihnen verwendete Version fest.

Dann müssen Sie in Ihrer web.config den Handler im entsprechenden Abschnitt registrieren, wie in der anderen Antwort beschrieben.

4
Wallace Breza

Dieser Fehler kann auch auftreten, wenn Sie den Handler für 32 Bit eingerichtet haben, aber 64 Bit (oder umgekehrt) ausführen. Es ist einfach, beide einzurichten und alle Basen abzudecken.

Beachten Sie die Unterschiede zwischen "preCondition" und "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>
2
James

Keine der vorherigen Antworten funktionierte für mich.
Ich verwende IIS 8.5, .Net v4.0, Integrated und erhielt immer noch eine 404 mit der folgenden Handler-Konfiguration:

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


Ich habe die Ablaufverfolgung aktiviert und Folgendes gefunden:

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 


Wie Sie sehen, sieht es so aus, als hätte sie die Anfrage mit meinem benutzerdefinierten HttpHandler testEmail richtig abgerufen, aber MVC hatte sie gestohlen
Ich habe meine Routendefinitionen in RouteConfig.cs geöffnet und Folgendes gefunden:

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

Ich habe es verstanden, Anfragen, die für meinen Handler bestimmt sind, zu ignorieren ...
Ich hoffe, das hilft jemandem - ich habe mir die Haare herausgerissen!

1
farmer-Bri

Hoffentlich hilft meine Lösung anderen. Bei einem Serverwechsel von IIS6 auf 7.5, beide .Net 4.0 Integrated, hatte ich ein Captcha-Steuerelement, das aufhörte zu arbeiten. Es stellte sich heraus, dass das Problem durch das Entfernen dieses Attributs preCondition="integratedMode,runtimeVersionv2.0" vom <add>-Knoten in <system.webserver><handlers> behoben wurde.

0