Asp.NET API Web-405-le verbe HTTP utilisé pour accéder à cette page n'est pas autorisé - comment configurer handler mappings

j'ai écrit REST service en utilisant ASP.NET Web API. J'essaie d'envoyer la 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 que je suis proche de la solution, j'ai découvert que je devrais activer la gestion à distance IIS , aller à la section Mappings Handler et Ajouter Supprimer verbe à la position appropriée... mais le problème est qu'il y a beaucoup de les différentes positions sur la liste... (sth comme ici: http://www.somacon.com/p126.php ).

lequel dois-je éditer? Peu d'entre eux n'ont pas d'extension, par exemple "ExtensionUrlHandler-Integrated-4.0" et j'y ai ajouté le verbe supprimer, mais cela ne fonctionne toujours pas...

c'était juste un tir dans le noir pour modifier celui-là, donc devrais-je modifier une position différente? Si oui, lequel? Ou peut-être est-il rien de plus ce que je dois faire?

le même service web fonctionne parfaitement sur mon service local, donc je suppose que le problème est avec le distant IIS...

salutations

82
demandé sur Bart 2012-03-24 23:01:51

11 réponses

la cause commune de cette erreur est WebDAV . Assurez-vous de le désinstaller.

21
répondu Darin Dimitrov 2012-03-24 19:36:01

vous n'avez pas besoin de désinstaller WebDAV, il suffit d'ajouter ces lignes sur le web.config:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>
284
répondu giacomelli 2013-01-22 18:39:30

Changez Votre Site Web.Fichier de configuration comme ci-dessous

 <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>
14
répondu Hithesh 2014-03-05 07:58:04

Changez Votre Site Web.Fichier de configuration comme ci-dessous. Il va agir comme un charme.

dans le noeud <system.webServer> Ajouter ci-dessous la partie du code

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

après ajout, votre Web.Config ressemblera à ci-dessous

<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>
13
répondu Santosh Prasad Sah 2013-11-01 07:57:11

Peu fréquent, mais peut aider certains.

assurez-vous d'utiliser [HttpPut] du système .Web.Http

nous obtenions une "méthode interdite" 405,sur une méthode HttpPut decorrated.

notre problème semble peu commun, car nous avons utilisé accidentellement l'attribut [HttpPut] du système.Web.Mvc et Pas système.Web.Http

la raison étant, resharper a suggéré le .Mvc version, où-comme d'habitude Système.Web.Http est déjà référencé lorsque vous dérivez directement de ApiController nous utilisions une classe qui a étendu ApiController.

3
répondu Nick Josevski 2013-04-19 04:14:20

si aucune des solutions ci-dessus n'a résolu votre problème comme dans mon cas (toujours coincé avec mon module RestClient face à 405), essayez de demander votre Api avec un outil comme Postman ou Fiddler. Je veux dire que le problème peut être ailleurs comme une mauvaise requête formatée.

je découvre que mon module RestClient demandait un "Put" avec un paremètre Id pas bien formaté :

http://myserver/api/someresource?id=75fd954d-d984-4a31-82fc-8132e1644f78

au lieu de

http://myserver/api/someresource/75fd954d-d984-4a31-82fc-8132e1644f78

Incidiblement, mauvais 405 - Méthode non autorisée (IIS 7.5)

3
répondu Guillaume RAYMOND 2018-07-11 09:49:45

j'ai eu ce cas (méthode 405 non autorisée) lorsque la méthode de post api web que j'appelais avait des types primitifs pour les paramètres, au lieu d'un type complexe qui a été accédé à partir du corps. Comme ceci:

cela a fonctionné:

 [Route("update"), Authorize, HttpPost]
  public int Update([FromBody] updateObject update)

Ce n'est pas le cas:

 [Route("update"), Authorize, HttpPost]
 public int Update(string whatever, int whatever, string whatever)
2
répondu Tony Anderson 2015-10-12 22:34:47

cette erreur provient du gestionnaire de fichier statique, qui par défaut ne filtre aucun verbe, mais ne peut probablement traiter QU'avec HEAD et GET.

et c'est parce qu'aucun autre manipulateur ne s'est approché de la plaque et a dit qu'ils pouvaient gérer la suppression.

puisque vous utilisez le WEBAPI, qui en raison du routage n'a pas de fichiers et donc des extensions, les ajouts suivants doivent être ajoutés à votre web.fichier de configuration:

<system.webserver>
    <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="C:\windows\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="C:\windows\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" />

évidemment ce qui est nécessaire dépend du mode Classique vs mode intégré, et le mode classique dépend de bitness. De plus, L'en-tête OPTIONS a été ajouté pour le traitement CORS, mais si vous ne faites pas CORS, vous n'avez pas besoin de cela.

POUR INFO, ta toile.config est la version locale de l'application (ou répertoire d'application) dont le niveau supérieur est applicationHost.config.

1
répondu Gerard ONeill 2017-02-08 19:53:03

dans notre cas, le problème était avec federated signon entre un site.net et ADFS. Lors de la redirection vers le point final ADFS, le paramètre wctx nécessitait les trois paramètres WSFederationAuthenticationModule.CreateSignInRequest méthode: rm , id , et ru

merci à Guillaume Raymond pour le Conseil de vérifier les paramètres D'URL!

0
répondu dan fox 2014-10-29 00:25:59

outre toutes les solutions ci-dessus, vérifiez si vous avez le " id "ou tout paramètre défini sur mesure dans la méthode DELETE correspond à la config route.

public void Delete(int id)
{
    //some code here
}

si vous frappez avec des erreurs répétées 405 mieux réinitialiser la signature de la méthode par défaut comme ci-dessus et essayer.

la config par défaut va chercher id dans L'URL. Donc le nom du paramètre id est important ici à moins que vous ne changiez la route config sous le dossier App_Start .

vous pouvez changer le type de données du id cependant.

par exemple, la méthode ci-dessous devrait fonctionner très bien:

public void Delete(string id)
{
    //some code here
}

Note: également s'assurer que vous passez les données sur l'url pas la méthode de données qui portera la charge utile comme le contenu du corps.

DELETE http://{url}/{action}/{id}

exemple:

DELETE http://localhost/item/1

Espérons que cela aide.

0
répondu Arun 2015-11-16 12:51:31

si c'est IIS 8.0, vérifiez si L'Activation HTTP est activée. Server manager -> IIS -> Manage (voir en haut à droite) - > Add Roles and Features ->... - >accédez à la configuration WCF puis sélectionnez L'Activation HTTP.

0
répondu Narsi Venkat 2017-07-18 22:08:34