Ich habe den REST-Service mit der ASP.NET-Web-API geschrieben. Ich versuche, eine HttpDelete-Anfrage zu senden, erhalte jedoch die folgende Fehlermeldung:
405 - Das für den Zugriff auf diese Seite verwendete HTTP-Verb ist nicht zulässig
Ich denke, ich bin nah an der Lösung. Ich habe herausgefunden, dass ich die IIS-Remoteverwaltung aktivieren, zum Abschnitt Handlerzuordnungen gehen und das Verb DELETE an der entsprechenden Position hinzufügen sollte ... aber das Problem ist, dass es viele verschiedene Positionen gibt die Liste ... (etw wie hier: http://www.somacon.com/p126.php ).
Welches soll ich bearbeiten? Nur wenige von ihnen haben keine Erweiterung, z. B. "ExtensionUrlHandler-Integrated-4.0", und ich habe das Verb DELETE hinzugefügt, aber es funktioniert immer noch nicht ...
Es war nur ein Schuss in die Dunkelheit, um diesen zu ändern. Sollte ich also eine andere Position ändern? Wenn ja, welcher? Oder gibt es noch etwas, was ich tun soll?
Der gleiche Webdienst funktioniert auch in meinem lokalen Dienst einwandfrei. Ich denke, das Problem liegt beim Remote-IIS ...
Schöne Grüße
Antworten:
Häufige Ursache für diesen Fehler ist WebDAV . Stellen Sie sicher, dass Sie es deinstallieren.
quelle
Sie müssen WebDAV nicht deinstallieren. Fügen Sie einfach diese Zeilen zur Datei web.config hinzu:
quelle
Ändern Sie Ihre Web.Config-Datei wie folgt
quelle
Ändern Sie Ihre Web.Config-Datei wie folgt. Es wird wie Charme wirken.
Fügen
<system.webServer>
Sie im Knoten den folgenden Teil des Codes hinzuNach dem Hinzufügen sieht Ihre Web.Config wie folgt aus
quelle
Ich hatte dieses Problem und löste Folgendes:
Wählen Sie die Backend-Site aus
in der Funktionsansicht: Öffnen Sie die Handlerzuordnung
quelle
Wenn keine der oben genannten Lösungen Ihr Problem wie in meinem Fall gelöst hat (immer noch mit meinem RestClient-Modul in Richtung 405), versuchen Sie, Ihre API mit einem Tool wie Postman oder Fiddler anzufordern. Ich meine, das Problem kann anderswo wie eine schlecht formatierte Anfrage liegen.
Ich stelle fest, dass mein RestClient-Modul einen 'Put' mit einem nicht gut formatierten ID-Parameter angefordert hat:
anstatt
Im Übrigen gibt eine schlecht formatierte Anforderung 405 zurück - Methode nicht zulässig (IIS 7.5)
quelle
Gelegentlich, kann aber einigen helfen.
Wir haben eine 'Methode nicht erlaubt' 405 für eine dekorrierte HttpPut-Methode erhalten.
Unser Problem scheint ungewöhnlich zu sein, da wir versehentlich das Attribut [HttpPut] von System.Web.Mvc und nicht von System.Web.Http verwendet haben
Der Grund dafür ist, dass resharper die .Mvc-Version vorgeschlagen hat, auf die wie üblich bereits auf System.Web.Http verwiesen wird, wenn Sie direkt von ApiController ableiten. Wir haben eine Klasse verwendet, die ApiController erweitert.
quelle
Ich habe dies geschehen lassen (405-Methode nicht erlaubt), als die von mir aufgerufene Web-API-Post-Methode primitive Typen für Parameter anstelle eines komplexen Typs hatte, auf den vom Körper aus zugegriffen wurde. Wie so:
Das hat funktioniert:
Das hat nicht:
quelle
Dieser Fehler kommt vom Staticfile-Handler, der standardmäßig keine Verben filtert, aber wahrscheinlich nur mit HEAD und GET umgehen kann.
Und das liegt daran, dass kein anderer Handler auf den Teller trat und sagte, er könne mit DELETE umgehen.
Da Sie das WEBAPI verwenden, das aufgrund des Routings keine Dateien und daher Erweiterungen enthält, müssen der Datei web.config die folgenden Ergänzungen hinzugefügt werden:
Offensichtlich was benötigt wird hängt das, vom klassischen Modus im Vergleich zum integrierten Modus ab, und der klassische Modus hängt von der Bitigkeit ab. Außerdem wurde der OPTIONS-Header für die CORS-Verarbeitung hinzugefügt. Wenn Sie jedoch kein CORS ausführen, benötigen Sie das nicht.
Zu Ihrer Information, Ihre web.config ist die lokale Version der Anwendung (oder des Anwendungsverzeichnisses), deren oberste Ebene applicationHost.config ist.
quelle
Wenn es sich um IIS 8.0 handelt, prüfen Sie, ob die HTTP-Aktivierung aktiviert ist. Server-Manager -> IIS -> Verwalten (siehe oben rechts) -> Rollen und Funktionen hinzufügen -> ... -> Zur WCF-Konfiguration wechseln und dann HTTP-Aktivierung auswählen.
quelle
In unserem Fall lag das Problem bei der Verbundanmeldung zwischen einer .NET-Site und ADFS. Wenn der ADFS Umleiten Endpunkt der
wctx
Parameter alle drei Parameter für die benötigteWSFederationAuthenticationModule.CreateSignInRequest
Methode:rm
,id
, undru
Vielen Dank an Guillaume Raymond für den Tipp, die URL-Parameter zu überprüfen!
quelle
Überprüfen Sie neben allen oben genannten Lösungen, ob das "
id
" oder ein benutzerdefinierter Parameter in derDELETE
Methode mit der Routenkonfiguration übereinstimmt.Wenn Sie mit wiederholten 405-Fehlern auftreten, setzen Sie die Methodensignatur besser wie oben auf den Standardwert zurück und versuchen Sie es.
Die Routenkonfiguration wird standardmäßig
id
in der URL gesucht. Daher ist der Parameternameid
hier wichtig, es sei denn, Sie ändern die Routenkonfiguration unterApp_Start
Ordner.Sie können den Datentyp des
id
obwohl ändern .Zum Beispiel sollte die folgende Methode gut funktionieren:
Hinweis: Stellen Sie außerdem sicher, dass Sie die Daten über die URL und nicht über die Datenmethode übergeben , die die Nutzdaten als Textinhalt enthält.
Beispiel:
Ich hoffe es hilft.
quelle
Ich werde für diejenigen, die beim Versuch,
PHP
(Laravel
in einem Fall) oder einer anderen einzigartigenIIS
Hosting-Situation zu laufen, stecken bleiben, hinzufügen405 error
, dass Sieverbs
den Handler für diese spezielle Situation ändern müssen ... alsoPHP
ging ich zu, da ich ihn verwendet habePHP
Fügen Sie den Handler hinzu und fügen Sie auf der Registerkarte "Request Restrictions
Dann" dasVerbs
gewünschte hinzuverbs
. Das war alles , was ich das hinzufügen benötigt ,web.config
damitCORS
inLaravel
.quelle
Keiner der oben genannten Punkte hat bei mir funktioniert und ich habe Probleme mit einer Support-Seite behoben ( https://support.microsoft.com/en-us/help/942051/error-message-when-a-user-visits-a-website) -das-wird-auf-einem-Server gehostet) Dann habe ich die Anwendungshostdatei mit einer der Arbeitskopien verglichen und es scheint, als hätte ich eine Reihe von Handlern vermisst, und als ich diese wieder zum Anwendungshost hinzufügte, fing es an zu arbeiten. Ich habe all das vermisst,
quelle