J'ai récemment mis à niveau Visual Studio 2010 vers Visual Studio 2012 RC. Le programme d'installation installe également IIS 8 Express que Visual Studio utilise désormais comme serveur Web par défaut.
IIS 8 bloque mes requêtes API WEB qui utilisent des verbes PUT AND DELETE. IIS renvoie une erreur 405, The requested resource does not support http method 'PUT'
.
Je sais que les gens ont eu des problèmes avec cela dans le passé et il y a plusieurs messages à ce sujet sur Stack Overflow. Avec IIS 7 Express, la solution était de désinstaller WebDav. Malheureusement, je ne vois aucun moyen de le faire avec IIS 8.
J'ai essayé de modifier les sections WebDav de applicationhost.config mais cela n'a pas aidé. Par exemple, j'ai supprimé <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
du fichier de configuration.
J'ai passé beaucoup trop de temps là-dessus. Il doit y avoir un moyen simple d'activer PUT et DELETE?
la source
ExtensionlessUrl-Integrated-4.0
.Réponses:
D'accord. Je suis finalement arrivé au fond des choses. Vous devez sauter à travers quelques obstacles pour que les verbes PUT et DELETE fonctionnent correctement avec IIS8. En fait, si vous installez la version candidate de VS 2012 et créez un nouveau projet d'API WEB, vous constaterez que les exemples de méthodes PUT et DELETE renvoient des erreurs 404 prêtes à l'emploi.
Pour utiliser les verbes PUT et DELETE avec l'API Web, vous devez éditer% userprofile% \ documents \ iisexpress \ config \ applicationhost.config et ajouter les verbes au gestionnaire ExtensionlessUrl comme suit:
Changez cette ligne:
à:
En plus de ce qui précède, vous devez vous assurer que WebDAV n'interfère pas avec vos demandes. Cela peut être fait en commentant les lignes suivantes à partir de applicationhost.config.
Sachez également que la convention de l'API Web par défaut est que le nom de votre méthode doit être le même que le verbe HTTP appelé. Par exemple, si vous envoyez une demande de suppression HTTP, votre méthode doit être nommée par défaut Delete.
la source
WebDAVModule
de la section des modules, selon la réponse de Santosh Sah .Modifiez votre fichier Web.Config comme ci-dessous. Cela agira comme du charme.
Dans le nœud,
<system.webServer>
ajoutez ci-dessous une partie du codeAprès l'ajout, votre Web.Config ressemblera à ci-dessous
la source
WebDAVModule
est pertinente."ExtensionlessUrlHandler-Integrated-4.0"
(comme dans la réponse ci-dessus) tandis que IIS 8.5 l'a renommé en"ExtensionlessUrl-Integrated-4.0"
(également mentionné par Mark S. Le nom du gestionnaire est affiché dans la page d'erreur IIS, une fois que vous recevez l'erreur, il devrait donc être trivial de savoir lequel définir. J'utilise les deux noms afin de prendre en charge différents environnements d'hébergement.Retirer le WebDAV fonctionne parfaitement pour mon cas:
il est toujours préférable de résoudre le problème via web.config au lieu d'aller le résoudre via iis ou machine.config pour garantir que cela n'arriverait pas si l'application hébergée sur une autre machine
la source
Mettez à jour votre web.config
http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx
Supprime la nécessité de modifier vos configurations d'hôte.
la source
Dans l'API Web Asp.Net - webconfig. Cela fonctionne dans tous les navigateurs.
Ajoutez le code suivant dans la balise System.web
Remplacez votre balise system.webserver par ce code ci-dessous
la source
system.webserver
section devrait suffire - assurez-vous simplement que vous avez le bon nom pour le gestionnaire d'URL sans extension.cela a fonctionné pour moi sur iis8 avec certaines des autres réponses. Mon erreur était un 404.6 spécifiquement
la source
Juste une mise à jour rapide pour toute personne susceptible de rencontrer ce problème. À partir d'aujourd'hui, changer le% userprofile% \ documents \ iisexpress \ config \ applicationhost.config ne fonctionne plus (cela fonctionnait bien jusqu'à présent, je ne sais pas si cela est dû à une mise à jour de Windows). Après des heures de frustration, j'ai changé le web.config pour ajouter ces gestionnaires à system.webserver pour le faire fonctionner:
la source
Activer CORS (agréable et soigné)
1.Ajouter un paquet de pépites CORS
2. dans le fichier WebApiConfig.cs à la méthode Register, ajoutez le code ci-dessous:
ex: en
utilisant System.Web.Http;
3.Ajoutez le code ci-dessous dans l'espace de noms du contrôleur, notamment get, post, delete, put ou toute méthode http
ex:
référence: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
la source
Après que rien n'a fonctionné, j'ai pu résoudre ce problème en suivant les étapes ci-dessous:
• N'a pas sélectionné les paramètres IIS 'WEB DAV PUBLISHING' lors de l'installation d'IIS. • INETMGR - Site Web par défaut - Filtrage des demandes - Verbes HTTP - PUT comme vrai
la source
Après des recherches sans fin et en essayant les réponses déjà fournies (en ajoutant les verbes PUT, DELETE et en supprimant WEBdav), cela n'a tout simplement pas fonctionné.
Je suis allé aux paramètres de journalisation IIS:> Afficher les fichiers journaux. Dans mon cas, W3SVC4 était le dossier avec la dernière date, a ouvert le dossier, recherché le dernier fichier journal et vu cette entrée: GET / Rejected-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD
La méthode de mise à jour a été répertoriée avec le verbe GET, bizarre non? J'ai donc cherché sur Google Rejected-By-UrlScan et trouvé ce lien: UrlScan a cassé mon blog .
Je suis allé ici:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini
Fondamentalement, UrlScan a bloqué les verbes PUT et DELETE. J'ai ouvert ce fichier INI, ajouté PUT et DELETE aux AllowVerbs et les ai supprimés des listes DenyVerbs. J'ai enregistré le fichier INI et cela a fonctionné! Donc, pour moi, ces étapes étaient nécessaires à côté des conseils ExtensionlessUrlHandler.
Windows Webserver 2008 R2 (64 bits), IIS 7.5. J'utilise ceci en combinaison avec DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Ma méthode de mise à jour:
la source
Pour PHP, c'était simplement:
J'imagine que cela fonctionnera aussi avec d'autres gestionnaires.
la source
Outre toutes les solutions ci-dessus, vérifiez si vous avez le " id " ou tout paramètre personnalisé défini dans la méthode DELETE correspond à la configuration de la route.
Si vous rencontrez des erreurs 405 répétées, réinitialisez la signature de la méthode par défaut comme ci-dessus et essayez.
La configuration de la route par défaut recherchera l' identifiant dans l'URL. Ainsi, le nom du paramètre id est important ici, sauf si vous modifiez la configuration de l'itinéraire sous le dossier App_Start .
Vous pouvez cependant changer le type de données de l' identifiant .
Par exemple, la méthode ci-dessous devrait fonctionner correctement:
Remarque: assurez-vous également de transmettre les données via l'URL et non la méthode de données qui transportera la charge utile en tant que contenu du corps.
Exemple:
J'espère que ça aide.
la source
J'ai rencontré le même problème avec vous, puis je l'ai résolu.Voici des solutions, je souhaite que cela puisse peut-être aider en
premier
Dans la
modules
configuration IIS , bouclez le WebDAVModule , si votre serveur Web l'a, puis supprimez-leSeconde
Dans la
handler mappings
configuration IIS , vous pouvez voir la liste des gestionnaires d'activation, pour le choisirthe PHP item
, le modifier, sur la page d'édition, cliquez sur le bouton de restrictions de demande, puis sélectionnezthe verbs tab
dans le modal, dans le libellé spécifier les verbes à gérer, vérifiez leall verbs radio
, puis cliquez sur ok, vous voyez peut-être aussi un avertissement, cela nous montre que vous utilisez des guillemets doubles pour l'exécution de PHP-CGI, puis faites-lesi c'est fait, redémarrez le serveur IIS, ce sera ok
la source
Je ne sais pas si vous avez modifié le bon fichier de configuration. Essayez les étapes suivantes
ouvrez% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config
Par défaut, les entrées ci-dessous sont commentées dans le fichier applicationhost.config. décommentez ces entrées.
la source
Voici comment autoriser des verbes HTTP supplémentaires à l'aide de l'interface graphique du gestionnaire IIS.
Dans IIS Manager, sélectionnez le site pour lequel vous souhaitez autoriser PUT ou DELETE.
Cliquez sur l'option "Filtrage des demandes". Cliquez sur l'onglet "Verbes HTTP".
Cliquez sur le lien "Autoriser le verbe ..." dans la barre latérale.
Dans la zone qui apparaît, tapez "SUPPRIMER", cliquez sur OK.
Cliquez à nouveau sur le lien "Autoriser le verbe ..." dans la barre latérale.
Dans la boîte qui apparaît, tapez "PUT", cliquez sur OK.
la source
J'utilise un fichier ashx dans une application MVC et aucune des réponses ci-dessus n'a fonctionné pour moi. IIS 10.
Voici ce qui a fonctionné. Au lieu de changer " ExtensionlessUrl-Integrated-4.0 " dans IIS ou web.config, j'ai changé " SimpleHandlerFactory-Integrated-4.0 " pour les fichiers " * .ashx ":
la source
L'autre raison peut être la suivante:
j'ai changé ma méthode Url pour Web Api en fonction de cette réponse :
Mais cette méthode crée un lien comme:
Cela fonctionne correctement avec les requêtes GET et POST mais pas avec PUT ou DELETE.
Alors je viens de le remplacer par:
et cela a résolu le problème.
la source
Dans IIS 8.5 / Windows 2012R2, rien de mentionné ici ne fonctionnait pour moi. Je ne sais pas ce que signifie supprimer WebDAV, mais cela n'a pas résolu le problème pour moi.
Ce qui m'a aidé, ce sont les étapes ci-dessous;
Maintenant, tout fonctionne.
la source
Vous pouvez convertir votre méthode Delete en POST comme;
la source