ASP.NET l'API Web - METTRE & SUPPRIMER les Verbes Non Admis - IIS 8
J'ai récemment mis à niveau à partir de Visual Studio 2010 pour Visual Studio 2012 RC. Le programme d'installation installe également IIS 8 Express de Visual Studio utilise maintenant comme le serveur web par défaut.
IIS 8 bloque mon API WEB demandes qui utilisent PUT ET DELETE verbes. IIS renvoie une erreur 405, The requested resource does not support http method 'PUT'
.
Je sais que les gens ont des problèmes avec cela dans le passé et il y a plusieurs messages à ce sujet sur un Débordement de Pile. Avec IIS 7 Express la solution est de désinstaller le protocole WebDav. Malheureusement, je ne vois pas de moyen de le faire avec IIS 8.
J'ai essayé de montage WebDav sections de applicationhost.config mais qui n'a pas aidé. Par exemple, je l'ai enlevé <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
partir du fichier de configuration.
J'ai passé beaucoup trop de temps sur ce. Il doit y avoir un moyen simple de permettre PUT et DELETE?
- Ce toujours en panne dans la version RTM. Viens de perdre 3 heures sur ce... Tout ce qui était nécessaire pour ajouter d'autres verbes à
ExtensionlessUrl-Integrated-4.0
. - Je ne pense pas que ce soit cassé, mais est par la conception. Je pense que changer le comportement par défaut pourrait interférer avec WebDAV et de casser la compatibilité ascendante. Cela ne voulait pas travailler avec IIS7 quand WebDAV a été installé.
- Aussi je viens de perdre 3 heures sur ce... 6 ans après ce post.
- veuillez jeter un oeil à stackoverflow.com/a/55134621/4746570
Vous devez vous connecter pour publier un commentaire.
D'accord. J'arrivai enfin au bas de cette. Vous avez besoin de sauter à travers des cerceaux pour obtenir le PUT et DELETE verbes travailler correctement avec IIS8. En fait, si vous installez la version release candidate de VS 2012 et créez un nouveau projet d'API WEB, vous trouverez que l'échantillon les méthodes PUT et DELETE retour des erreurs 404 de la boîte.
D'utiliser le PUT et DELETE verbes avec l'API Web, vous devez modifiez le fichier %userprofile%\documents\iisexpress\config\applicationhost.config et ajouter les verbes à l'ExtensionlessUrl gestionnaire comme suit:
Modifier cette ligne:
à:
En plus de ce qui précède vous devez vous assurer WebDAV est de ne pas interférer avec vos demandes. Cela peut être fait en commentaires les lignes suivantes à partir de applicationhost.config.
Également être conscients que la valeur par défaut de l'API Web de la convention, c'est que votre nom de la méthode doit être la même que la invoquée HTTP verbe. Par exemple, si vous envoyez un HTTP supprimer la demande de votre méthode, par défaut, devrait être nommé Supprimer.
WebDAVModule
de la section modules, comme par Santosh Sah réponse.web.config
solution ci-dessous est ce que vous avez besoin pour IIS.Modifier Votre Site Web.Fichier de configuration comme ci-dessous. Il va agir comme un charme.
Nœud
<system.webServer>
ajouter ci-dessous la partie du codeAprès l'ajout de votre site Web.Config va ressembler à ci-dessous
WebDAVModule
est pertinent."ExtensionlessUrlHandler-Integrated-4.0"
(comme dans la réponse ci-dessus), tandis que IIS 8.5 a cette renommé"ExtensionlessUrl-Integrated-4.0"
(également mentionnée par Mark S. le nom de La fonction est affiché dans IIS page d'erreur, une fois que vous recevez le message d'erreur, donc il doit être facile de savoir lequel. J'utilise les deux noms dans l'ordre à l'appui de différents environnements d'hébergement.Supprimer la WebDAV fonctionne parfaitement pour mon cas:
il est toujours préférable de résoudre le problème par le biais du web.config au lieu d'aller à fixer par le biais de l'iis ou à la machine.config du bénéficiaire il n'arriverait pas si l'application hébergé sur une autre machine
Mise à jour de votre site 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 votre hôte configs.
Dans Asp.Net l'API Web - webconfig. Cela fonctionne dans tous les navigateurs.
Ajoutez le code suivant à l'intérieur du Système.balise web
Remplacer votre système.le serveur web de la balise avec ce code ci-dessous
system.webserver
section devrait suffire - assurez-vous d'avoir la droit nom pour le extensionless gestionnaire d'url.cela a fonctionné pour moi sur iis8 avec quelques autres réponses. Mon erreur a été d'une 404.6 spécifiquement
Juste une mise à jour rapide pour quelqu'un d'autre qui pourrait rencontrer ce genre de problème. À compter d'aujourd'hui, changer le dossier %userprofile%\documents\iisexpress\config\applicationhost.config ne fonctionne plus (ce qui fonctionnait bien jusqu'à maintenant, vous ne savez pas si cela est dû à une mise à jour Windows). Après des heures de frustration, j'ai changé le web.config pour ajouter ces gestionnaires de système.serveur web pour qu'il fonctionne:
Permettre de la SCRO (agréable et soigné)
1.Ajouter de la SCRO du package nuget
2.dans le WebApiConfig.cs fichier pour Enregistrer la méthode ajouter soufflet code :
ex:
en utilisant le Système.Web.Http;
3.Ajouter soufflet code dans l'espace de noms du contrôleur incluent get,post,de supprimer,de mettre ou de toute méthode http
ex:
référence :http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
Après rien n'a fonctionné, j'ai pu résoudre ce problème en étapes ci-dessous:
• Ne sélectionnez "WEB DAV PUBLICATION de" paramètres IIS, lors de l'installation de IIS.
• INETMGR - Site web par Défaut – le Filtrage de requêtes HTTP Verbes de METTRE un Vrai
Après d'interminables à chercher et à essayer déjà fourni des réponses (en ajoutant le PUT,DELETE les verbes et les supprimer WEBdav) ça ne fonctionne pas.
Je suis allé à IIS paramètres d'enregistrement: > Afficher les Fichiers Journaux. Dans mon cas, W3SVC4 était le dossier avec la date la plus récente, a ouvert le dossier, regardé le dernier fichier journal et vu cette entrée:
GET /Rejeté Par UrlScan ~/MONDOMAINE/API/ApiName/UpdateMETHOD
La méthode de mise à Jour a été répertorié avec le verbe OBTENIR, bizarre droite? J'ai donc Cherché sur google Rejeté Par UrlScan et trouvé ce lien: UrlScan Cassé Mon Blog.
Je suis allé ici: %windir%\system32\inetsrv\urlscan\UrlScan.ini
Fondamentalement, la UrlScan bloqué PUT et DELETE verbes.
J'ai ouvert ce fichier INI, a ajouté le PUT et DELETE à la AllowVerbs et retirées de la DenyVerbs listes.
J'ai enregistré le fichier INI et cela a fonctionné! Donc, pour moi, ces étapes ont été nécessaires à côté de la ExtensionlessUrlHandler conseils.
Serveur web Windows 2008 R2 (64 bits), IIS 7.5.
Je suis l'aide de cette combinaison avec DotNetNuke (DNN) WebAPI. ASP.Net 4.0
Ma méthode de mise à jour:
Pour PHP, c'est tout simplement:
J'imagine que cela fonctionne avec d'autres gestionnaires de trop.
En plus de toutes les solutions ci-dessus, vérifiez si vous avez le "id", ou tout autre paramètre définies dans la méthode de SUPPRESSION est la mise en correspondance de la route config.
Si vous frappez avec la répétition des erreurs 405 amélioration de la réinitialisation de la signature de la méthode par défaut comme ci-dessus et d'essayer.
La route config par défaut va chercher id dans l'URL. Si le nom du paramètre id est important ici, à moins de modifier l'itinéraire de la config dans App_Start dossier.
Vous pouvez modifier le type de données de la id bien.
Par exemple la méthode ci-dessous devrait fonctionner parfaitement:
Remarque: Également vous assurer de transmettre les données sur les url ne sont pas les données de la méthode qui vous permettra de transporter la charge utile que le contenu du corps.
Exemple:
Espère que cela aide.
Que j'ai rencontré le même problème avec vous, alors résolu,
Vous trouverez ici des solutions, j'espère que ça peut peut-être aider
Première
Dans IIS
modules
de Configuration, la boucle de la WebDAVModule, si votre serveur web a, puis retirezDeuxième
Dans IIS
handler mappings
de configuration, vous pouvez voir la liste de permettre à un gestionnaire, de choisirthe PHP item
, de le modifier, sur la page d'édition, cliquez sur demande de restrictions bouton, puis sélectionnezthe verbs tab
modale, dans le spécifier les verbes être gérer étiquette, vérifiez laall verbs radio
, puis cliquez sur ok, vous aussi peut-être voir un avertissement, il nous montre que l'utilisation des guillemets doubles pour PHP-CGI exécution, puis le fairesi fait, puis redémarrez le serveur IIS, il sera ok
Je ne suis pas sûr si vous avez édité droit fichier de configuration. Essayez les étapes suivantes
ouvrir le dossier %userprofile%\ducuments\iisexpress\config\applicationhost.config
Par défaut soufflet donné les entrées sont commentées dans le applicationhost.fichier de configuration. décommenter ces entrées.
Ici est de savoir comment vous vous laissez un peu plus de Verbes HTTP à l'aide du Gestionnaire des services IIS GUI.
Dans le Gestionnaire des services IIS, sélectionnez le site que vous souhaitez METTRE ou SUPPRIMER pour.
Cliquez sur le bouton "Demande de Filtrage" option. Cliquez sur le bouton "HTTP Verbes" onglet.
Cliquez sur "Autoriser Verbe..." lien dans la barre latérale.
Dans la boîte qui s'affiche, tapez "SUPPRIMER", cliquez sur OK.
Cliquez sur "Autoriser Verbe..." lien dans la barre latérale de nouveau.
Dans la boîte qui s'affiche, tapez "METTRE", cliquez sur OK.
Je suis en utilisant un fichier ashx dans une application MVC et aucune des réponses ci-dessus, a travaillé pour moi. IIS 10.
Voici ce qui fait le travail. Au lieu de changer de "ExtensionlessUrl-Intégré-4.0" dans IIS ou web.config j'ai changé "SimpleHandlerFactory-Intégré-4.0" pour "*.ashx" des fichiers:
L'autre raison peut être la suivante:
J'ai changé l'Url de l'Api Web procédé selon la cette réponse:
Mais cette méthode crée un lien comme:
Cela fonctionne correctement avec GET et POST de la demande, mais pas avec PUT ou DELETE.
J'ai donc juste de le remplacer avec:
et il a résolu le problème.
Dans IIS 8.5/Windows 2012R2, Rien de mentionné ici a fonctionné pour moi.
Je ne sais pas ce qui est signifié par la Suppression de WebDAV, mais qui ne résout pas le problème pour moi.
Ce qui m'a aidé est les étapes ci-dessous;
Maintenant, tout fonctionne.
Vous pouvez convertir votre méthode de Suppression en tant que POSTE;