web-dev-qa-db-fra.com

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

J'utilise le type WebClient pour télécharger des fichiers * .cab sur mon serveur. Côté 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 l'erreur "Méthode 405 non autorisée". La réponse a indiqué 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 un peu.

94
smwikipedia

J'ai activé le suivi des demandes ayant échoué et 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 fonction de traçage IIS est très utile.

39
smwikipedia

Cette erreur est souvent causée par le module WebDAV qui tente de gérer ce type de demande. Une solution simple consiste à le supprimer des modules et des gestionnaires de la section system.webServer situés dans votre fichier web.config. Voici un exemple de configuration:

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

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

20
Nick

Tiré de ici et cela a fonctionné pour moi:

1.Accédez à IIS Manager.

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.

18
goran85

Le retrait du module WebDAV devrait suffire. Il suffit de changer votre Web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />
15
Dunken

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

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 Rules puis sélectionnez l’option Disable WebDAV présente dans la barre de droite.

  2. Sélectionnez Modules, trouvez le WebDAV Module et supprimez-le.

  3. Sélectionnez HandlerMapping, recherchez la WebDAVHandler et supprimez-la.

Redémarrez IIS.

15
coding_idiot

Il est préférable de simplement supprimer la fonctionnalité WebDAV inutilisée. Allez à Programmes et fonctionnalités => Activez ou désactivez les fonctionnalités Windows et désactivez Publication WebDAV sous 

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

 enter image description here

6

Pour une raison quelconque, marquer WebDAVModule comme "enlever" dans mon web.config ne suffisait pas à 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 des fonctionnalités, recherchez Règles de création WebDAV . Double-cliquez dessus ou sélectionnez Ouvrir une fonction dans le menu contextuel (clic droit).
  3. Dans le volet Actions, recherchez et cliquez sur Paramètres WebDAV ... .
  4. Dans les paramètres WebDAV, recherchez Demander le comportement du filtrage , puis sélectionnez Autoriser le filtrage des verbes . Définir Autoriser le filtrage des verbes à False .
  5. Dans le volet Actions, cliquez sur Appliquer .

Cela empêche WebDAV de rejeter les verbes qu'il ne prend pas en charge, ce qui permet à un PUT de transiter sans encombre dans votre gestionnaire RESTful.

4
Dan K

J'ai eu les mêmes problèmes avec PUT, PATCH et DELETE mais je n'ai rien installé avec WebDav. La résolution 1 de cet article m'a enfin aidée: http://support.Microsoft.com/kb/942051

3
gust1n

Pour moi, cette erreur ne disparaissait pas et autorisait les méthodes PUT, quoi que je fasse .. j'ai désinstallé webdav, mis la configuration dans web.config pour supprimer webdav des gestionnaires et des modules, et configuré PUT comme verbe autorisé sur les filtres de demande sur iis .. et assurez-vous que les mappages de gestionnaires iis 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 fonctionnalités du serveur. redémarré. a repris les rôles et a redémarré. tout a fonctionné avec la configuration ci-dessus.

--- Ce qui suit fera accepter PUT, mais l'enverra au mauvais gestionnaire. --ignore le dessous

enfin, l'ajout du verbe PUT en tant que verbe autorisé sur le mappage du gestionnaire TRACE sur iis a fonctionné .. puisque j'avais activé le traçage des erreurs ayant échoué et que ce verbe ne permettait pas le verbe.

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

2
Harish

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 traité par "ExtensionlessUrlHanlder-Integrated-4.0". Cependant, 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.

2
Atilio Jobson

Un autre module important qui doit être reconfiguré avant que PUT et DELETE ne fonctionne pas est le verbe 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 aussi cet article: https://stackoverflow.com/a/22018750/9376681

1
Michael Radhuber

Pour Windows Server 2012 -> Allez dans Gestionnaire de serveur -> Supprimer les rôles et fonctionnalités -> Rôles de serveur -> Serveur Web (IIS) -> Serveur Web -> Fonctionnalités HTTP communes -> Décochez Web Publishing et supprimez-le -> Redémarrez le serveur.

1
Savan Gadhiya

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

Allez dans IIS Manager-> Votre site-> Mappages de gestionnaires-> PHPxx_via_FastCGI-> Restrictions de demande-> Verbes, puis ajoutez PUT.

C'est tout!

1
Stefan Pintilie

Si le pool d'applications IIS s'exécute en mode classique, assurez-vous de disposer des éléments suivants dans votre fichier 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" />
0
Arjun Mukherji

Dans mon cas, j'avais déplacé Web Deploy sur un autre port, qui était également le port IIS (et non le port 80). Je ne savais pas au début, mais même s'il n'y avait aucune erreur d'exécution sur le même port, il semble que Web Deploy ait probablement répondu en premier au lieu de IIS pour une raison quelconque, ce qui a provoqué cette erreur. Je viens de déplacer ma liaison IIS vers un autre port et tout va bien. ;)

0
James Wilkins

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.

0
nPcomp

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

L'entrée est située dans la section modules.

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

0
Yush0