134 votes

Asp.NET Web API - 405 - Le verbe HTTP utilisé pour accéder à cette page n'est pas autorisé - comment définir les mappages des gestionnaires ?

J'ai écrit un service REST en utilisant ASP.NET Web API. J'essaie d'envoyer une requête HttpDelete, mais j'obtiens l'erreur suivante :

405 - Le verbe HTTP utilisé pour accéder à cette page n'est pas autorisé.

Je pense être proche de la solution, j'ai découvert que je devais activer la gestion à distance de IIS, aller dans la section Handler Mappings et ajouter le verbe DELETE à la position appropriée... mais le problème est qu'il y a beaucoup de positions différentes dans la liste... (quelque chose comme ici : http://www.somacon.com/p126.php ).

Lequel dois-je modifier ? Quelques-uns d'entre eux n'ont pas d'extension, par exemple "ExtensionUrlHandler-Integrated-4.0" et j'y ai ajouté le verbe DELETE, mais ça ne fonctionne toujours pas...

C'était juste un coup dans le vide de modifier celui-là, alors devrais-je modifier une autre position ? Si oui, laquelle ? Ou peut-être y a-t-il autre chose que je devrais faire ?

Le même service web fonctionne parfaitement bien sur mon service local, donc je suppose que le problème vient de l'IIS distant...

Salutations

5 votes

Salut Bart. Peux-tu changer la réponse pour celle du web.config ? C'est vraiment mieux que de le désinstaller. et tu as beaucoup de téléspectateurs

0 votes

439voto

giacomelli Points 1666

Vous n'avez pas besoin de désinstaller WebDAV, ajoutez simplement ces lignes au web.config :

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

1 votes

Cela a bien fonctionné. Il faut l'utiliser en entier ; inclure les deux lignes "remove name=...".

59 votes

Cela devrait être la réponse acceptée, car il s'agit d'une solution locale et non globale.

1 votes

J'ai lutté avec ce problème pendant des heures jusqu'à ce que je tombe sur ce post. Cela a résolu mon problème sans avoir à désinstaller quoi que ce soit.

36voto

Darin Dimitrov Points 528142

La cause courante de cette erreur est WebDAV . Assurez-vous de le désinstaller.

0 votes

Je l'ai désactivé, mais ça n'a pas aidé.

3 votes

La désactivation n'aide pas, vous devez le désinstaller.

0 votes

Je peux confirmer que la désactivation n'aide pas. @John_ a raison, vous devez désinstaller.

25voto

Hithesh Points 23

Changez votre fichier Web.Config comme suit

 <system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

1 votes

L'ajout de la suppression de WebDAV et de WebDAVMODULE a permis d'utiliser les fonctions PUT et DELETE. Merci.

0 votes

Il se bloque lorsque j'ajoute le code ci-dessus dans le fichier de configuration web de mon projet d'api.

21voto

Santosh Sah Points 259

Changez votre fichier Web.Config comme ci-dessous. Cela fonctionnera comme un charme.

Dans le nœud <system.webServer> ajouter la partie du code ci-dessous

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

Après l'ajout, votre Web.Config ressemblera à ce qui suit

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

0 votes

Vous ne devez pas renvoyer * pour Allow-Origin. Voir stackoverflow.com/a/12014554

0 votes

@Karlas, s'il vous plaît lisez d'abord la question avant de placer votre commentaire et de voter à la baisse. La question n'était pas posée pour "Allow-Origin" mais plutôt pour le gestionnaire des verbes http.

3 votes

Je n'ai pas rétrogradé, juste un commentaire secondaire, au cas où quelqu'un aurait copié-collé la solution.

3voto

Nick Josevski Points 1997

Peu fréquent mais peut aider certains.

assurez-vous que vous utilisez [HttpPut] de System.Web.Http

Nous obtenions un message "Method not allowed" 405, sur une méthode décorée HttpPut.

Il semblerait que notre problème ne soit pas commun, car nous avons accidentellement utilisé la fonction [HttpPut] de System.Web.Mvc et non de System.Web.Http.

La raison en est que resharper a suggéré la version .Mvc, alors qu'habituellement, System.Web.Http est déjà référencé lorsque vous dérivez directement de la version .Mvc. ApiController nous utilisions une classe qui étendait ApiController.

1 votes

Si vous utilisez l'API Web, vous ne décorez pas du tout les méthodes du contrôleur, mais vous utilisez le verbe dans le nom de la méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X