Ich habe kürzlich ein Upgrade von Visual Studio 2010 auf Visual Studio 2012 RC durchgeführt. Das Installationsprogramm installiert auch IIS 8 Express, das Visual Studio jetzt als Standardwebserver verwendet.
IIS 8 blockiert meine WEB-API-Anforderungen, die PUT AND DELETE-Verben verwenden. IIS gibt einen 405-Fehler zurück The requested resource does not support http method 'PUT'
.
Ich weiß, dass die Leute in der Vergangenheit Probleme damit haben, und es gibt mehrere Meldungen zu Stack Overflow. Mit IIS 7 Express bestand die Lösung darin, WebDav zu deinstallieren. Leider sehe ich mit IIS 8 keine Möglichkeit, dies zu tun.
Ich habe versucht, die WebDav-Abschnitte aus applicationhost.config heraus zu bearbeiten, aber das hat nicht geholfen. Zum Beispiel habe ich <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
aus der Konfigurationsdatei entfernt.
Ich habe viel zu lange damit verbracht. Es muss eine einfache Möglichkeit geben, PUT und DELETE zu aktivieren.
quelle
ExtensionlessUrl-Integrated-4.0
.Antworten:
In Ordnung. Ich bin dem endlich auf den Grund gegangen. Sie müssen durch einige Rahmen springen, damit die Verben PUT und DELETE mit IIS8 ordnungsgemäß funktionieren. Wenn Sie den Release Candidate von VS 2012 installieren und ein neues WEB-API-Projekt erstellen, werden Sie feststellen, dass die Beispielmethoden PUT und DELETE sofort 404-Fehler zurückgeben.
Um die Verben PUT und DELETE mit der Web-API zu verwenden, müssen Sie% userprofile% \ documents \ iisexpress \ config \ applicationhost.config bearbeiten und die Verben wie folgt zum ExtensionlessUrl-Handler hinzufügen:
Ändern Sie diese Zeile:
zu:
Darüber hinaus sollten Sie sicherstellen, dass WebDAV Ihre Anforderungen nicht stört. Dies kann durch Auskommentieren der folgenden Zeilen aus applicationhost.config erfolgen.
Beachten Sie auch, dass die Standard-Web-API-Konvention lautet, dass Ihr Methodenname mit dem aufgerufenen HTTP-Verb identisch sein sollte. Wenn Sie beispielsweise eine HTTP-Löschanforderung senden, sollte Ihre Methode standardmäßig den Namen Löschen haben.
quelle
WebDAVModule
den Abschnitt gemäß der Antwort von Santosh Sah aus dem Modulbereich entfernen .Ä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
WebDAVModule
ist relevant."ExtensionlessUrlHandler-Integrated-4.0"
(wie in der obigen Antwort), während IIS 8.5 dies umbenannt hat"ExtensionlessUrl-Integrated-4.0"
(auch erwähnt durch) Mark S erwähnt). Der Name des Handlers wird in angezeigt die IIS-Fehlerseite, sobald Sie den Fehler erhalten, sollte es trivial sein zu wissen, welche eingestellt werden soll. Ich verwende beide Namen, um verschiedene Hosting-Umgebungen zu unterstützen.Entfernen Sie das WebDAV funktioniert perfekt für meinen Fall:
Es ist immer besser, das Problem über die web.config zu lösen, als es über die iis oder machine.config zu beheben, um zu gewährleisten, dass es nicht passieren würde, wenn die App auf einem anderen Computer gehostet würde
quelle
Aktualisieren Sie Ihre web.config
http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx
Entfernt die Notwendigkeit, Ihre Host-Konfigurationen zu ändern.
quelle
In der Asp.Net Web API - webconfig. Dies funktioniert in allen Browsern.
Fügen Sie den folgenden Code in das System.web-Tag ein
Ersetzen Sie Ihr system.webserver-Tag durch den folgenden Code
quelle
system.webserver
Abschnitts sollte ausreichen - stellen Sie einfach sicher, dass Sie den richtigen Namen für den erweiterungslosen URL-Handler haben.Dies funktionierte für mich auf iis8 zusammen mit einigen anderen Antworten. Mein Fehler war speziell ein 404.6
quelle
Nur ein kurzes Update für alle anderen, die auf dieses Problem stoßen könnten. Ab heute funktioniert das Ändern des% userprofile% \ documents \ iisexpress \ config \ applicationhost.config NICHT mehr (dies funktionierte bisher einwandfrei, nicht sicher, ob dies auf ein Windows-Update zurückzuführen ist). Nach stundenlanger Frustration habe ich die Datei web.config geändert, um diese Handler zu system.webserver hinzuzufügen, damit sie funktionieren:
quelle
CORS aktivieren (nett und ordentlich)
1. Fügen Sie das CORS-Nuget-Paket hinzu
2. Fügen Sie in der Datei WebApiConfig.cs zur Registrierungsmethode folgenden Code hinzu:
Beispiel:
using System.Web.Http;
3. Fügen Sie den folgenden Code in den Namespace des Controllers ein, einschließlich get, post, delete, put oder einer beliebigen http-Methode
Ex:
Referenz: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
quelle
Nachdem nichts funktioniert hatte, konnte ich dies durch die folgenden Schritte lösen:
• Während der Installation von IIS wurden die IIS-Einstellungen für 'WEB DAV PUBLISHING' nicht ausgewählt. • INETMGR - Standardwebsite - Anforderungsfilterung - HTTP-Verben - PUT als wahr
quelle
Nach endlosem Suchen und Ausprobieren der bereits bereitgestellten Antworten (Hinzufügen der Verben PUT, DELETE und Entfernen von WEBdav) funktionierte es einfach nicht.
Ich ging zu den IIS-Protokollierungseinstellungen:> Protokolldateien anzeigen. In meinem Fall war W3SVC4 der Ordner mit dem neuesten Datum, öffnete den Ordner, suchte die neueste Protokolldatei und sah diesen Eintrag: GET / Rejected-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD
Die Update-Methode wurde mit dem Verb GET aufgelistet, komisch, oder? Also habe ich nach "Abgelehnt von UrlScan" gegoogelt und diesen Link gefunden: UrlScan hat meinen Blog gebrochen .
Ich ging hierher:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini
Grundsätzlich hat UrlScan die Verben PUT und DELETE blockiert. Ich habe diese INI-Datei geöffnet, PUT und DELETE zu AllowVerbs hinzugefügt und sie aus den DenyVerbs-Listen entfernt. Ich habe die INI-Datei gespeichert und es hat funktioniert! Für mich waren diese Schritte neben den ExtensionlessUrlHandler-Hinweisen notwendig.
Windows Webserver 2008 R2 (64 Bit), IIS 7.5. Ich verwende dies in Kombination mit DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Meine Aktualisierungsmethode:
quelle
Für PHP war es einfach:
Ich kann mir vorstellen, dass dies auch mit anderen Handlern funktioniert.
quelle
Überprüfen Sie neben allen oben genannten Lösungen, ob die " id " oder ein benutzerdefinierter Parameter in der DELETE-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 sucht standardmäßig in der URL nach der ID . Daher ist die ID des Parameternamens hier wichtig, es sei denn, Sie ändern die Routenkonfiguration im Ordner App_Start .
Sie können jedoch den Datentyp der ID ä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 habe das gleiche Problem mit Ihnen konfrontiert und es dann gelöst. Hier sind Lösungen, ich wünschte, es könnte vielleicht helfen
, Erste
Führen Sie in der IIS-
modules
Konfiguration eine Schleife für das WebDAVModule durch . Wenn Ihr Webserver darüber verfügt, entfernen Sie esZweite
In der IIS-
handler mappings
Konfiguration sehen Sie die Liste der aktivierenden Handler, um sie auszuwählenthe PHP item
, zu bearbeiten, auf der Bearbeitungsseite, klicken Sie auf die Schaltfläche Anforderungsbeschränkungen, wählen Sie dannthe verbs tab
im Modal die Option aus, um die zu behandelnden Verben zu kennzeichnen, und aktivieren Sie die Optionall verbs radio
, dann Klicken Sie auf OK. Möglicherweise wird auch eine Warnung angezeigt. Sie zeigt uns, dass für die Ausführung von PHP-CGI doppelte Anführungszeichen verwendet werdenWenn Sie dies getan haben, starten Sie den IIS-Server neu. Es ist in Ordnung
quelle
Ich bin nicht sicher, ob Sie die richtige Konfigurationsdatei bearbeitet haben. Versuchen Sie die folgenden Schritte
Öffnen Sie% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config
Standardmäßig werden unten angegebene Einträge in der Datei applicationhost.config kommentiert. Kommentieren Sie diese Einträge aus.
quelle
So erlauben Sie zusätzliche HTTP-Verben über die IIS Manager-GUI.
Wählen Sie im IIS-Manager die Site aus, für die Sie PUT oder DELETE zulassen möchten.
Klicken Sie auf die Option "Filterung anfordern". Klicken Sie auf die Registerkarte "HTTP-Verben".
Klicken Sie in der Seitenleiste auf den Link "Verb zulassen ...".
Klicken Sie in dem angezeigten Feld "LÖSCHEN" auf OK.
Klicken Sie erneut in der Seitenleiste auf den Link "Verb zulassen ...".
Klicken Sie in dem angezeigten Feld "PUT" auf OK.
quelle
Ich verwende eine Ashx-Datei in einer MVC-Anwendung und keine der oben genannten Antworten hat bei mir funktioniert. IIS 10.
Hier ist, was funktioniert hat. Anstatt " ExtensionlessUrl-Integrated-4.0 " in IIS oder web.config zu ändern, habe ich " SimpleHandlerFactory-Integrated-4.0 " für " * .ashx " -Dateien geändert :
quelle
Der andere Grund kann folgender sein:
Ich habe meine Url for Web Api-Methode entsprechend dieser Antwort geändert :
Diese Methode erstellt jedoch Verknüpfungen wie:
Dies funktioniert korrekt mit GET- und POST-Anforderungen, jedoch nicht mit PUT oder DELETE.
Also habe ich es einfach ersetzt durch:
und es hat das Problem behoben.
quelle
In IIS 8.5 / Windows 2012R2 hat hier nichts erwähnt. Ich weiß nicht, was unter Entfernen von WebDAV zu verstehen ist, aber das hat das Problem für mich nicht gelöst.
Was mir geholfen hat, sind die folgenden Schritte;
Jetzt funktioniert alles.
quelle
Sie können Ihre Löschmethode als POST konvertieren als;
quelle