Ich freue mich über jede Hilfe, da die Seite heute Abend online gehen soll!
Ich habe einen Web-API-Controller mit einer Delete-Methode. Die Methode wird auf meinem lokalen Computer mit IIS Express (Windows 8) einwandfrei ausgeführt. Sobald ich sie jedoch auf dem Live-IIS-Server (Windows Server 2008 R2) bereitgestellt habe, funktioniert sie nicht mehr und gibt die folgende Fehlermeldung aus:
HTTP-Fehler 405.0 - Methode nicht zulässig Die gesuchte Seite kann nicht angezeigt werden, da eine ungültige Methode (HTTP-Verb) verwendet wird
Ich habe mich im Internet nach Lösungen umgesehen und die vernünftigsten implementiert. Meine Webkonfiguration hat die folgenden Einstellungen:
<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>
Ich habe auch erfolglos versucht, die Handlerzuordnungen und die Anforderungsfilterung in IIS zu ändern. Bitte beachten Sie, dass die WebDAV-Authoring-Regeln in IIS anscheinend deaktiviert sind.
Alle Ideen werden sehr geschätzt Danke.
In einigen Fällen kann das Entfernen nur aus Modulen den nächsten Fehler verursachen:
Lösung wurde vorgeschlagen , hier . Müssen es auch von Handlern entfernen.
quelle
In meinem Fall funktionierte keine der oben genannten Lösungen. Dies lag daran, dass ich den Namen des Parameters in meiner
Delete
Methode geändert hatte .ich hatte
anstatt
Ich muss den
id
Namen verwenden, da dies der Name ist, der in meinerWebApiConfig
Datei deklariert ist . Beachten Sie denid
Namen in der dritten und vierten Zeile:Ich habe diese Lösung von hier bekommen .
quelle
Das Javascript für HTTP-
DELETE
Verb muss folgendermaßen aussehen:Sie nicht so etwas wie folgt verwenden:
wie wenn Sie die
POST
Methode verwenden.quelle
Nachdem ich hier fast alle Lösungen ausprobiert hatte, funktionierte dies für mich. Fügen Sie dies in Ihre APIs-Konfigurationsdatei ein
quelle
Wenn Sie IIS 7.0 oder eine neuere Version verwenden. Dieses Problem betrifft hauptsächlich das WebDAV-Erweiterungsmodul auf dem IIS-Server. Dies geschah während der Verwendung der Aktion "Post" ODER "Löschen".
Bitte versuchen Sie es mit der folgenden Einstellung in der Webkonfiguration
quelle
Ich hatte auch das gleiche Problem, ich rufe WebAPi an und erhalte diesen Fehler. Das Hinzufügen der folgenden Konfiguration in web.config für Dienste löste mein Problem
in der Datei web.config hat mein Problem gelöst. So habe ich von der Client-Seite aus angerufen
quelle
Wechseln Sie zur Datei applicationHost.config (normalerweise unter C: \ Windows \ System32 \ inetsrv \ config) und kommentieren Sie die folgende Zeile in applicationHost.config aus
1) Unter <Handler>:
2) Kommentieren Sie auch das folgende Modul aus, auf das der obige Handler unter <Module> verweist
quelle
In meinem Fall habe ich es versäumt, etwas hinzuzufügen
{id}
,[Route("")]
und ich habe den gleichen Fehler erhalten. Das Hinzufügen hat das Problem für mich behoben:[Route("{id}")]
quelle
Ich hatte die 405-Fehlermethode Methode nicht zulässig, weil ich die Delete-Methode auf dem WebApi-Controller nicht öffentlich gemacht hatte.
Es hat lange gedauert, bis ich das gefunden habe (zu lange!), Da ich in diesem Fall einen Fehler "Nicht gefunden" erwartet hätte. Daher habe ich fälschlicherweise angenommen, dass meine Löschmethode abgelehnt wurde.
Der Grund für Nicht erlaubt statt Nicht gefunden ist, dass ich auch eine Get-Methode für dieselbe Route hatte (was bei der Implementierung von REST der Normalfall ist). Die öffentliche Get-Funktion wird vom Routing abgeglichen und dann aufgrund der falschen http-Methode abgelehnt.
Ein einfacher Fehler, den ich kenne, aber er kann jemand anderem Zeit sparen.
quelle
Nur um hinzuzufügen. Wenn dies Ihre Konfiguration ist
Bitte machen Sie weiter, wie Hugo sagte, und setzen Sie das Route-Attribut nicht auf die Controller-Get-Methode. Dies gab in meinem Fall ein Problem.
quelle
Ich hatte das ähnliche Problem, aber für PUT - keiner der anderen Vorschläge hat für mich funktioniert.
Allerdings habe ich
int
eher als die Standardeinstellungstring
für die ID verwendet. Das Hinzufügen{id:int}
zur Route löste mein Problem.quelle
Wir mussten unserer web.config benutzerdefinierte Header hinzufügen, da unsere Anfrage mehrere Header hatte, die die API-Antwort verwirrten.
quelle
Das Attribut [HttpPost] oben in der Löschmethode hat dieses Problem für mich gelöst:
quelle
data
(dh den Text der Anfrage) anstelleparams
(dh der URL der Anfrage) auf der Clientseite verwenden.