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>
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>
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 :)
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>
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.
Ensuite, dans votre configuration web, vous devrez enregistrer le gestionnaire dans la section appropriée, comme décrit dans l'autre réponse.
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>
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!
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.