"Méthode 405 non autorisée" dans IIS7.5 pour la méthode "PUT"

113

J'utilise WebClienttype pour télécharger des fichiers * .cab sur mon serveur. Du côté du serveur, j'ai enregistré un gestionnaire HTTP pour le fichier * .cab avec la méthode PUT comme ci-dessous:

 <add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />

Mais j'obtiens toujours une erreur "méthode 405 non autorisée". La réponse a déclaré que les méthodes autorisées sont les suivantes:

Headers = {Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Fri, 27 May 2011 02:08:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET}

Même si j'autorise explicitement la méthode PUT dans le filtrage des demandes IIS pour mon application Web, la même erreur se produit toujours.

Je soupçonne qu'il s'agit d'un problème lié à IIS. J'espère que quelqu'un pourra m'éclairer là-dessus.

smwikipedia
la source

Réponses:

214

Cette erreur est souvent provoquée par le module WebDAV qui tente de gérer ce type de requêtes. Une solution simple consiste à le supprimer des modules et des gestionnaires de la system.webServersection juste à l'intérieur de votre fichier web.config. Voici un exemple de configuration:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>
Davide Icardi
la source
2
En utilisant l'article MS suivant, j'ai ajouté la balise remove aux gestionnaires, mais cela ne fonctionnait toujours pas. Grâce à votre réponse, je vois que j'avais également besoin de l'ajouter à la section modules. Très appréciée. Voici l'article: asp.net/web-api/overview/testing-and-debugging/…
Tod Birdsall
Génial, vous m'avez sauvé des heures de débogage douloureux! :)
Kaspars Ozols
Solution simple et facile, merci!
MorenajeRD
J'ai essayé mais ne fonctionne pas pour moi. J'obtiens toujours l'erreur 405 - Méthode non autorisée. Notez que j'utilise IIS Express et que l'erreur ne se produit que sur PUT mais fonctionne pour GET, POST AND DELETE.
Thierry
47

J'ai activé le suivi des demandes ayant échoué et j'ai obtenu les informations suivantes:

 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data>
  <Data Name="ModuleName">WebDAVModule</Data>
  <Data Name="Notification">16</Data>
  <Data Name="HttpStatus">405</Data>
  <Data Name="HttpReason">Method Not Allowed</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>

Donc, j'ai désinstallé le WebDAVModule de mon IIS, tout va bien maintenant ~

La fonctionnalité de traçage IIS est très utile.

smwikipedia
la source
1
Merci pour votre réponse ! Après 2 jours de recherche, la seule solution de travail que j'ai trouvée pour éviter "Méthode 405 non autorisée" était de définir les en-têtes CORS dans la Application_BeginRequestméthode, comme mentionné dans cette réponse stackoverflow.com/a/14631068/827168 . Mais votre réponse est meilleure que toutes les autres car elle aide à repérer le problème au lieu d'appliquer un correctif aléatoire :)
pomeh
@pomeh Je crois toujours qu'il faut rendre la logique complète. :)
smwikipedia
1
Notez que vous devriez également aller dans les mappages de gestionnaires et supprimer WebDAV à partir de là, sinon vous obtiendrez le message d'erreur Handler "WebDAV" has a bad module "WebDAVModule" in its module list.
pipedreambomb
26

J'ai eu ce problème avec WebDAV lors de l'hébergement d'un projet MVC4 WebApi. Je l'ai contourné en ajoutant cette ligne au web.config:

<handlers>
  <remove name="WebDAV" />
  <add name="WebDAV" path="*" verb="*" modules="WebDAVModule"
      resourceType="Unspecified" requireAccess="None" />
</handlers>

Comme expliqué ici: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html

pseudo
la source
La meilleure solution pour quelqu'un qui a réellement besoin de WebDAV. La question de savoir si quelqu'un a besoin de WebDAV est une discussion distincte.
MrBoJangles
24

Pris d' ici et cela a fonctionné pour moi:

1 Accédez au Gestionnaire IIS.

2.Cliquez sur votre application.

3. Allez dans "Mappages de gestionnaires".

4.Dans la liste des fonctionnalités, double-cliquez sur "WebDAV".

5.Cliquez sur "Demander des restrictions".

6.Dans l'onglet "Verbes", sélectionnez "Tous les verbes".

7.Appuyez sur OK.

goran85
la source
3
Cela m'a aidé, mais je vais clarifier avec mon expérience. 2. Application (Service Web). 3. double-cliquez sur l'icône Mappages de gestionnaires dans le panneau central.
Gary
19

J'ai essayé la plupart des réponses et malheureusement, aucune d'entre elles n'a fonctionné.

Voici ce qui a fonctionné pour moi. Il y a 3 choses à faire sur le site pour lequel vous voulez PUT (sélectionnez le site):

  1. Ouvrez WebDav Authoring Rulespuis sélectionnez l' Disable WebDAVoption présente dans la barre de droite.

  2. Sélectionnez Modules, recherchez WebDAV Moduleet supprimez-le.

  3. Sélectionnez HandlerMapping, recherchez WebDAVHandleret supprimez-le.

Redémarrez IIS.

coding_idiot
la source
Cela marche! Je ne sais pas si les 3 étapes peuvent être effectuées en modifiant le fichier web.config, mais cela a facilité l'utilisation uniquement de la console de gestion IIS. Notez simplement qu'il y a 3 entrées HandlerMapping commençant par WebDAV * - J'ai supprimé les 3 et la vie était belle.
SlimsGhost
1
J'ai essayé de désinstaller WebDav et je n'ai pas fonctionné. Ensuite, j'ai suivi les trois étapes ci-dessus et j'ai PUTcommencé à travailler.
rareyesdev
1
Les étapes 2 et 3 peuvent être appliquées à un répertoire virtuel sans affecter le reste du site.
Tonatio
1
Merci beaucoup. tu m'as sauvé. Après 7 heures de frustration, j'ai essayé toutes les réponses que je pouvais et finalement ta réponse m'a frappé. :)
Zeeshan Safdar
1
Merci, c'est ça.
Ahmad Hamdy le
17

La suppression du module WebDAV devrait être suffisante. Changez simplement votre Web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />
Dunken
la source
14

Il est préférable de supprimer simplement la fonction WebDAV inutilisée. Allez dans Programmes et fonctionnalités => Activer ou désactiver les fonctionnalités Windows et désactiver la publication WebDAV sous

Internet Information Services => World Wide Web Services => Fonctionnalités HTTP courantes

entrez la description de l'image ici

SliverNinja - MSFT
la source
Merci ! Cela a totalement résolu mon problème!
wmehanna
4

Pour une raison quelconque, marquer WebDAVModule comme "supprimer" dans mon web.config n'était pas suffisant pour résoudre le problème dans mon cas.

J'ai trouvé une autre approche qui a résolu le problème. Si vous êtes dans le même bateau, essayez ceci:

  1. Dans le gestionnaire IIS, sélectionnez l'application qui doit prendre en charge PUT.
  2. Dans la vue Fonctionnalités, recherchez Règles de création WebDAV . Double-cliquez dessus ou sélectionnez Ouvrir la fonction dans le menu contextuel (clic droit).
  3. Dans le volet Actions, trouver et cliquez sur Paramètres WebDAV ... .
  4. Dans les paramètres WebDAV, recherchez Comportement de filtrage des demandes , puis recherchez Autoriser le filtrage des verbes . Ensemble Autoriser le filtrage des verbes sur False .
  5. Dans le volet Actions, cliquez sur Appliquer .

Cela empêche WebDAV de rejeter les verbes qu'il ne prend pas en charge, permettant ainsi à un PUT de circuler vers votre gestionnaire RESTful sans être perturbé.

Dan K
la source
4

Un autre conseil de ma part. J'ai utilisé PHP + IIS, et les mappages de gestionnaire pour PHP n'avaient pas le verbe PUT.

Allez dans IIS Manager-> Votre site-> Handler Mappings-> PHPxx_via_FastCGI-> Request Restrictions-> Verbs, puis ajoutez PUT.

C'est tout!

Stefan Pintilie
la source
1
C'est la réponse dont les utilisateurs php ont besoin.
SpeedOfRound
4

Un autre module important qui doit être reconfiguré avant que PUT et DELETE ne fonctionnent est le verbe d'options

<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="WebDAV" />
<add name="OPTIONSVerbHandler" path="*" verb="*" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="Script" />
</handlers>

Voir également cet article: https://stackoverflow.com/a/22018750/9376681

Michael Radhuber
la source
3

J'utilisais Angular 8 et j'étais l'API de base .NET. J'ajoute ce qui suit dans mon fichier de service web.config. Cela résout mon erreur.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>
atik sarker
la source
2

Pour moi, cette erreur ne disparaîtrait pas et n'autoriserait pas les méthodes PUT, quoi que je fasse .. désinstaller webdav, mettre la configuration dans web.config pour supprimer webdav des gestionnaires et des modules, et configurer PUT comme verbe autorisé sur les filtres de requête sur iis .. et assurez-vous que les mappages de gestionnaire traitant la requête ont configuré PUT.

Mon problème était finalement dû à une mauvaise installation des extensions ASP.NET 4.5. Suppression de tout ce qui concerne asp.net des rôles et des fonctionnalités du serveur. redémarré. a lu les rôles et redémarré. tout a fonctionné avec la configuration ci-dessus.

--- Ce qui suit fera accepter PUT, mais l'enverra au mauvais gestionnaire. --ignorez ce qui suit

enfin, l'ajout du verbe PUT comme verbe autorisé sur le mappage du gestionnaire TRACE sur iis a fonctionné. puisque j'avais activé le traçage des erreurs échouées, et ce verbe n'autorisait pas le verbe.

la dernière fois que j'ai eu le même problème sur l'IIS d'un autre serveur, c'était dû à un '/' manquant à la fin de l'URL car il utilisait un gestionnaire par défaut sans utiliser probablement le document par défaut et maintenant je me rends compte que .. alors vérifiez IIS mappages de gestionnaires si rien d’autre n’aide.

Harish
la source
2

J'ai eu ce problème mais rien de lié à WebDAV n'était le problème. Dans mon cas, le client envoyait un POST à ​​www.myServer.com/api/chart. Cet appel doit être géré par le "ExtensionlessUrlHanlder-Integrated-4.0", cependant, d'une manière ou d'une autre, une structure de fichier locale a été créée dans le répertoire de mon serveur "... \ Server \ api \ chart \". Cela signifiait que le gestionnaire "StaticFile" était appelé à la place. La suppression de ces fichiers locaux a finalement résolu le problème.

Atilio Jobson
la source
2

Voici ce qui a fonctionné pour moi:

Ouvrez IIS et cliquez sur votre site.

1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.

nPcomp
la source
1

Pour Windows Server 2012 -> Accédez au Gestionnaire de serveur -> Supprimer les rôles et fonctionnalités -> Rôles du serveur -> Serveur Web (IIS) -> Serveur Web -> Fonctionnalités HTTP communes -> Décochez Publication WebDAV et supprimez-le -> Redémarrez le serveur.

Savan Gadhiya
la source
0

Si le pool d'applications IIS s'exécute en mode classique, assurez-vous que vous disposez des éléments suivants dans votre web.config

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
Arjun Mukherji
la source
0

Dans mon cas, j'avais déplacé Web Deploy vers un autre port, qui était également le port IIS (et non 80). Je ne m'en suis pas rendu compte au début, mais même s'il n'y avait aucune erreur s'exécutant tous les deux sous le même port, il semble que Web Deploy réponde probablement en premier à la place d'IIS pour une raison quelconque, provoquant cette erreur. Je viens de déplacer ma liaison IIS vers un autre port et tout va bien. ;)

James Wilkins
la source
0

Pour empêcher WebDav d'être activé du tout, supprimez l'entrée suivante de ApplicationHost.config: <add name="WebDAVModule" />

L'entrée se trouve dans la section modules.

Emplacement exact de la configuration: C:\Windows\System32\inetsrv\config\applicationHost.config

Yush0
la source
0

J'ai eu le même problème, avec une API RESTful fonctionnant sur aspnet core.

Je ne voulais pas désinstaller WebDAV et j'ai essayé la plupart des remèdes décrits ci-dessus. J'ai essayé de définir les verbes = "*" à la fois sur le site et sur le serveur lui-même, mais sans succès.

Ce qui a fait le truc pour moi était le suivant:

Gestionnaire IIS -> Sites -> MySite -> HandlerMappings -> aspNetCore -> Modifier

-> Restrictions de demande -> Accès -> Aucune (c'était Script).

Après cela, tout a fonctionné, même si j'ai remplacé les options WebDAV d'origine.

Dardan Vokshi
la source