WebAPI Supprimer ne fonctionne pas - 405 method not Allowed
J'apprécie toute l'aide sur ce que le site est censé aller en direct ce soir!
J'ai une web api contrôleur avec la méthode Delete. La méthode s'exécute correctement sur ma machine locale exécutant IIS Express (Windows 8) mais dès que j'ai déployé pour le live serveur IIS (Windows Server 2008 R2) il a cessé de travailler et déclenche le message d'erreur suivant:
Erreur HTTP 405.0 - Méthode Non Autorisée
La page que vous recherchez ne peut pas être affichée car une méthode non valide (HTTP Verbe) est utilisé
J'ai cherché sur le web pour des solutions et j'ai mis en place plus raisonnables que ceux. Ma configuration web a les paramètres suivants:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
J'ai également essayé de modifier les Mappages de gestionnaires et de Filtrage des demandes dans IIS en vain. Veuillez noter que les Règles de Création WebDAV dans IIS semble être désactivé.
Toutes les idées seront grandement appréciés
Merci.
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la solution finalement!
Si vous rencontrez le même problème, ajoutez la ligne suivante à votre site web.config
J'espère que cette aide
Application_BeginRequest
méthode, comme indiqué dans cette réponse, stackoverflow.com/a/14631068/827168Dans certains cas, le retrait à partir de modules peuvent produire de l'erreur suivante:
solution a été suggéré ici. Également besoin de l'enlever de gestionnaires.
Dans mon cas, aucune des solutions ci-dessus a été de travail. C'était parce que j'avais changé le nom du paramètre dans mon
Delete
méthode.J'avais
au lieu de
Je besoin pour utiliser le
id
nom car c'est le nom qui est déclarée dans monWebApiConfig
fichier. Remarque leid
nom dans les troisième et quatrième lignes:J'ai eu cette solution de ici.
Le Javascript pour HTTP
DELETE
verbe doit être comme ceci:Ne pas utiliser quelque chose comme ceci:
que lorsque vous utilisez la
POST
méthode.Après avoir essayé presque toutes les solutions ici, cela a fonctionné pour moi.
Ajouter ceci dans votre Api fichier de config
J'ai également eu le même problème, je fais appel WebAPi et est l'obtention de cette erreur.
L'ajout de configuration suivantes dans le web.config pour les services résolu mon problème
dans le web.fichier de configuration résolu mon problème.
C'est la Façon dont j'ai été l'appel du côté client
Aller à applicationHost.config (généralement sous C:\Windows\System32\inetsrv\config fichier et commentez la ligne suivante dans applicationHost.config
1)en Vertu de l' <gestionnaires d'>:
2)commentez le module suivant étant désignés par le au-dessus de gestionnaire en vertu de <modules>
Dans mon cas, j'ai manqué d'ajouter
{id}
à la[Route("")]
et j'ai eu le même message d'erreur.L'ajout qui a résolu le problème pour moi:
[Route("{id}")]
J'ai eu d'erreur 405 method not Allowed parce que j'avais omis de faire la méthode Delete sur la WebApi contrôleur public.
Il m'a fallu du temps pour trouver ce (trop long!) parce que je me serais attendu à un ne Trouve Pas d'erreur dans ce cas, j'ai donc été en supposant à tort que ma méthode de Suppression a été refusée.
La raison pour ne Pas Autorisées plutôt que de ne Pas Trouvé, c'est que j'ai eu aussi une méthode d'Obtenir pour le même trajet (ce qui sera le cas normal, lors de la mise en œuvre de REPOS). Le public d'Obtenir la fonction est compensée par le service de routage et puis refusée en raison de la mauvaise méthode http.
Une simple erreur, je sais, mais il peut sauver quelqu'un d'autre peu de temps.
Juste à ajouter. Si c'est votre config
merci de continuer à faire comme Hugo l'a dit, et ne pas définir l'Itinéraire de l'attribut pour le contrôleur de la méthode get, ce qui a donné un problème dans mon cas.
[HttpPost] attribut sur le sommet de Supprimer la méthode a résolu ce problème pour moi:
data
(c'est à dire le corps de la demande) au lieu deparams
(c'est à dire l'url de la demande) dans le côté client.J'ai eu le même problème mais pour les METTRE - aucun des autres suggestions ont travaillé pour moi.
Cependant, j'ai été en utilisant
int
plutôt que la valeur par défautstring
pour l'id. l'ajout de{id:int}
de la route a résolu mon problème.Nous avons dû ajouter des en-têtes personnalisés à notre site web.config que notre demande avait plusieurs en-têtes que la confusion dans l'API de réponse.