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.
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.
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>
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
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.
Le retrait du module WebDAV devrait suffire. Il suffit de changer votre Web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
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):
Ouvrez WebDav Authoring Rules
puis sélectionnez l’option Disable WebDAV
présente dans la barre de droite.
Sélectionnez Modules
, trouvez le WebDAV Module
et supprimez-le.
Sélectionnez HandlerMapping
, recherchez la WebDAVHandler
et supprimez-la.
Redémarrez IIS.
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:
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.
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
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.
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.
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
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.
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!
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" />
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. ;)
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.
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