web-dev-qa-db-fra.com

Problème de mappage HttpHandler -> Erreur HTTP 404 non trouvée

J'ai des problèmes pour essayer de mapper un HttpHandler dans le fichier web.config.

C'est le bit de configuration pertinent:

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

Lorsque je navigue vers http://localhost/myApp/whatever.hndlr, j'obtiens une erreur de serveur 404 (introuvable).

C'est la première fois que je connecte un HttpHandler afin que je manque quelque chose - toute aide appréciée!

METTRE &AGRAVE; JOUR:

Je suis parvenu à le faire fonctionner en utilisant les deux réponses jusqu'à présent - qui est en mesure d'expliquer pourquoi cela fonctionne obtient la réponse marquée!

Ceci est ma configuration (ne fonctionnera pas si vous n'avez pas les deux - je cours/ IIS7 en mode classique )

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

Utilisez-vous IIS7, si tel est le cas, le pool d’applications s’exécute en mode classique ou en mode pipeline? Si c'est IIS7 en mode pipeline, alors la référence du gestionnaire doit aller dans la section suivante

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

plutôt que dans la section suivante. 

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

Juste comme guide pour ceux qui sont coincés avec ce problème, j'ai trouvé l'attribut crucial d'être ..

resourceType="Unspecified"

A l'origine, je suivais un exemple Microsoft pour le configurer et ils l'avaient comme

resourceType="File"

qui ne cesse de me donner 404 erreurs. Mon HTTPHandler renvoie des graphiques.

J'espère que cela t'aides :)

9
CResults

j'utilise IIS7, la solution est la suivante:

dans la section 

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

et section

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

Quelle est l'extension de votre gestionnaire? Si vous utilisez une extension personnalisée telle que .hndlr , vous devrez peut-être également ajouter un ScriptMap in IIS et le diriger vers le runtime ASP.NET afin que IIS puisse être transféré. la demande au bon processeur.


  1. Dans IIS7, accédez à votre site Web
  2. Dans le groupe IIS, accédez à Mappages de gestionnaires
  3. Sous Actions cliquez sur Ajouter une mappe de script
  4. Définir le chemin de la demande sur * .hndlr
  5. Définissez le chemin d'accès au moteur d'exécution ASP.NET (% windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll) ou à la version que vous exécutez.

Ensuite, dans votre configuration web, vous devrez enregistrer le gestionnaire dans la section appropriée, comme décrit dans l'autre réponse.

4
Wallace Breza

Il est également possible de rencontrer cette erreur si vous avez configuré le gestionnaire pour 32 bits, mais que vous exécutez en 64 bits (ou inversement). Il est facile de configurer les deux et de couvrir toutes les bases.

Notez les différences "preCondition" et "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

Aucune des réponses précédentes n'a fonctionné pour moi.
J'utilise IIS 8.5, .Net v4.0, Integrated et j'obtenais toujours un 404 avec la configuration de gestionnaire suivante:

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


J'ai activé le traçage et trouvé ce qui suit:

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 


Comme vous pouvez le constater, il semble que la requête a été correctement saisie à l'aide de mon HttpHandler personnalisé testEmail mais MVC l'avait volée
J'ai ouvert mes définitions de route dans RouteConfig.cs et constaté que l’ajout:

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

Je l’ai fait pour ignorer les requêtes destinées à mon gestionnaire .
J'espère que cela aide quelqu'un - je m'arrachais les cheveux!

1
farmer-Bri

Espérons que ma solution aidera les autres. Sur un serveur, passez de IIS6 à 7.5, les deux .NET 4.0 Integrated, j'avais un contrôle Captcha qui ne fonctionnait plus. Il s'avère que la suppression de cet attribut preCondition="integratedMode,runtimeVersionv2.0" du noeud <add> dans <system.webserver><handlers> a résolu le problème.

0
InbetweenWeekends