J'apprécie toute aide à ce sujet car le site est censé être mis en ligne ce soir!
J'ai un contrôleur d'API Web avec une méthode Delete. La méthode s'exécute correctement sur ma machine locale exécutant IIS Express (Windows 8), mais dès que je l'ai déployée sur le serveur IIS en direct (Windows Server 2008 R2), elle a cessé de fonctionner et renvoie 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 (verbe HTTP) est utilisée
J'ai cherché sur le Web des solutions et j'en ai implémenté les plus raisonnables. 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 le filtrage des demandes dans IIS en vain. Veuillez noter que les règles de création WebDAV dans IIS semblent être désactivées.
Toutes les idées seront grandement appréciées Merci.
Dans certains cas, le supprimer uniquement des modules peut produire l'erreur suivante:
une solution a été suggérée ici . Il faut également le supprimer des gestionnaires.
la source
Dans mon cas, aucune des solutions ci-dessus ne fonctionnait. C'était parce que j'avais changé le nom du paramètre dans ma
Delete
méthode.j'ai eu
au lieu de
J'ai besoin d'utiliser le
id
nom car c'est le nom qui est déclaré dans monWebApiConfig
fichier. Notez leid
nom dans les troisième et quatrième lignes:J'ai eu cette solution d' ici .
la source
Le
DELETE
verbe Javascript pour HTTP doit être comme ceci:N'utilisez pas quelque chose comme ceci:
comme lorsque vous utilisez la
POST
méthode.la source
Après avoir essayé presque toutes les solutions ici, cela a fonctionné pour moi. Ajoutez ceci dans votre fichier de configuration d'API
la source
Si vous utilisez IIS 7.0 ou une version ultérieure. Ce problème est principalement lié au module d'extension WebDAV sur le serveur IIS. cela s'est produit lors de l'utilisation de l'action Publier OU supprimer.
Veuillez essayer le paramètre ci-dessous dans la configuration Web
la source
J'ai également eu le même problème, j'appelle WebAPi et j'obtiens cette erreur. L'ajout de la configuration suivante dans web.config pour les services a résolu mon problème
dans le fichier web.config a résolu mon problème. Voici comment j'appelais du côté client
la source
Accédez au fichier applicationHost.config (généralement sous C: \ Windows \ System32 \ inetsrv \ config) et commentez la ligne suivante dans applicationHost.config
1) Sous <gestionnaires>:
2) Mettez également en commentaire le module suivant référencé par le gestionnaire ci-dessus sous <modules>
la source
Dans mon cas, j'ai manqué d'ajouter
{id}
à la[Route("")]
et j'ai eu la même erreur. L'ajout de cela a résolu le problème pour moi:[Route("{id}")]
la source
J'ai eu la méthode d'erreur 405 non autorisée parce que j'avais omis de rendre publique la méthode Delete sur le contrôleur WebApi.
Il m'a fallu beaucoup de temps pour trouver cela (trop longtemps!) Parce que je m'attendais à une erreur Not Found dans ce cas, donc je supposais à tort que ma méthode Delete était refusée.
La raison de Not Allowed plutôt que Not Found est que j'avais également une méthode Get pour la même route (ce qui sera le cas normal lors de l'implémentation de REST). La fonction publique Get correspond au routage, puis est refusée en raison de la mauvaise méthode http.
Une simple erreur que je connais mais cela peut faire gagner du temps à quelqu'un d'autre.
la source
Juste pour ajouter. Si c'est votre config
s'il vous plaît continuez à faire comme Hugo l'a dit, et ne définissez pas l'attribut Route sur la méthode get du contrôleur, cela a posé un problème dans mon cas.
la source
J'ai eu le même problème mais pour PUT - aucune des autres suggestions n'a fonctionné pour moi.
Cependant, j'utilisais
int
plutôt que la valeurstring
par défaut pour l'ID. l'ajout{id:int}
de l'itinéraire a résolu mon problème.la source
Nous avons dû ajouter des en-têtes personnalisés à notre web.config car notre requête avait plusieurs en-têtes qui confondaient la réponse de l'API.
la source
L'attribut [HttpPost] en haut de la méthode Delete a résolu ce problème pour moi:
la source
data
(c'est-à-dire le corps de la requête) au lieu deparams
(c'est-à-dire l'url de la requête) côté client.