Dieser Fehler ist sehr häufig und ich habe alle Lösungen ausprobiert und keine davon hat funktioniert. Ich habe die WebDAV-Veröffentlichung in der Systemsteuerung deaktiviert und dies meiner Webkonfigurationsdatei hinzugefügt:
<handlers>
<remove name="WebDAV"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
Der Fehler bleibt bestehen. Dies ist der Controller:
static readonly IProductRepository repository = new ProductRepository();
public Product Put(Product p)
{
return repository.Add(p);
}
Methodenimplementierung:
public Product Add(Product item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
item.Id = _nextId++;
products.Add(item);
return item;
}
Und hier wird die Ausnahme ausgelöst:
client.BaseAddress = new Uri("http://localhost:5106/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("api/products", product);//405 exception
Irgendwelche Vorschläge?
c#
asp.net-web-api
webdav
Xardas
quelle
quelle
Ich hatte die gleiche Ausnahme. Mein Problem war, dass ich verwendet hatte:
SOLLTE SEIN
quelle
Ich habe viele Dinge versucht, um die DELETE-Methode zum Laufen zu bringen (ich habe die 405-Methode nicht als Web-API zugelassen), und schließlich habe ich [Route ("api / scan / {id}")] zu meinem Controller hinzugefügt und funktionierte einwandfrei. hoffe, dieser Beitrag hilft jemandem.
quelle
Mein Problem stellte sich als Attribut-Routing in WebAPI heraus. Ich habe eine benutzerdefinierte Route erstellt, die wie ein GET behandelt wurde, anstatt dass WebAPI feststellte, dass es sich um einen POST handelt
Ich wusste, dass es etwas Dummes sein musste (das deinen ganzen Tag verbraucht)
quelle
Chrome versucht häufig, einen
OPTIONS
Anruf zu tätigen , bevor ein Beitrag verfasst wird. Dadurch wird sichergestellt, dass die CORS-Header in Ordnung sind. Es kann problematisch sein, wenn Sie denOPTIONS
Aufruf in Ihrem API-Controller nicht bearbeiten .quelle
Dieser Fehler kann auch auftreten, wenn Sie versuchen, eine Verbindung zu http herzustellen, während sich der Server auf https befindet.
Es war ein bisschen verwirrend, weil meine Get-Anfragen in Ordnung waren, das Problem war nur bei Post-Anfragen vorhanden.
quelle
Ich habe den 405 bei meinem GET-Aufruf erhalten, und es stellte sich heraus, dass ich den Parameter in der serverseitigen GET-Methode benannt habe
Get(int formId)
und die Route ändern oder umbenennen mussteGet(int id)
.quelle
Sie können den Fehler 405 auch erhalten, wenn Ihre Methode einen Parameter erwartet und Sie ihn nicht übergeben.
Dies funktioniert NICHT (405 Fehler)
HTML-Ansicht / Javascript
Web-API:
Wenn die Methodensignatur wie oben beschrieben ist, müssen Sie Folgendes tun:
HTML-Ansicht / Javascript
quelle
Wenn Sie eine Route wie haben
Sie müssen genau den gleichen Parameternamen in der Methode verwenden, z
Wenn Sie nicht genau denselben Parameter übergeben, wird möglicherweise der Fehler "405-Methode nicht zulässig" angezeigt, da die Route nicht mit der Anforderung übereinstimmt und WebApi eine andere Controller-Methode mit einer anderen zulässigen HTTP-Methode trifft.
quelle
Hier ist eine Lösung
<handlers accessPolicy="Read, Script"> <remove name="WebDAV" /> </handlers>
Lösungsartikel zu docs.microsoft.com
und entfernen Sie WebDAV aus den Modulen
<remove name="WebDAVModule" />
quelle
Ich bin zu spät zu dieser Party, aber da nichts oben in den meisten Fällen entweder lebensfähig war oder funktionierte, wurde dies für mich endgültig gelöst.
Auf dem Server, auf dem die Site / der Dienst gehostet wurde, war eine Funktion erforderlich! HTTP-AKTIVIERUNG !!!
Das hat dann sofort geklappt! Das schmolz mein Gehirn
quelle
Dies beantwortet Ihre spezifische Frage nicht, aber als ich das gleiche Problem hatte, bin ich hier gelandet und habe mir gedacht, dass mehr Leute das Gleiche tun könnten.
Das Problem war, dass ich meine Get-Methode unabsichtlich als statisch deklariert hatte . Ich habe dies einen ganzen Vormittag verpasst und es gab keine Warnungen von Attributen oder ähnlichem.
Falsch:
Richtig:
quelle
[HttpPost] ist unnötig!
quelle
Ich konnte das NICHT lösen. Ich hatte CORS aktiviert und arbeitete, solange der POST ungültig war (ASP.NET 4.0 - WEBAPI 1). Als ich versuchte, eine HttpResponseMessage zurückzugeben, erhielt ich die HTTP 405-Antwort.
Aufgrund der obigen Antwort von Llad habe ich mir meine eigenen Referenzen angesehen.
Ich hatte das Attribut [System.Web.Mvc.HttpPost] über meiner POST-Methode aufgelistet.
Ich habe dies geändert, um Folgendes zu verwenden:
Das hat mein Leid behoben. Ich hoffe das hilft jemand anderem.
Der Vollständigkeit halber hatte ich Folgendes in meiner web.config:
quelle
json
ist dies wahrscheinlich,null
da Vorfluganforderungen normalerweise keine Nutzdaten haben, oder Sie führen die Nachaktion zweimal aus.Wir hatten ein ähnliches Problem. Wir haben versucht, von:
Also würden wir
.GET("/api/car")
und das würde ein werfen405 error
.Die Reparatur:
Die
CarController.cs
Datei befand sich im Verzeichnis/api/car
Als wir diesen API-Endpunkt anforderten, sendete IIS einen Fehler zurück, da es so aussah, als würden wir versuchen, auf ein virtuelles Verzeichnis zuzugreifen, auf das wir nicht zugreifen durften.Option 1: Ändern / Umbenennen des Verzeichnisses, in dem sich der Controller befindet.
Option 2: Ändern Sie das Routenpräfix in ein Verzeichnis, das nicht mit dem virtuellen Verzeichnis übereinstimmt.
quelle
In meinem Fall hatte ich einen physischen Ordner im Projekt mit demselben Namen wie die WebAPI-Route (z. B. Sandbox) und nur die POST-Anforderung wurde vom statischen Dateihandler in IIS (offensichtlich) abgefangen.
Ein irreführender 405-Fehler anstelle des eher erwarteten 404-Fehlers war der Grund, warum ich lange für die Fehlerbehebung gebraucht habe.
Nicht leicht darauf hereinzufallen, aber möglich. Hoffe es hilft jemandem.
quelle
Checken Sie die .csproj-Datei Ihres Projekts ein und ändern Sie sie
zu Ihrer Website URL wie folgt
quelle
Ein weiteres mögliches Problem, das dasselbe Verhalten verursacht, sind die Standardparameter im Routing. In meinem Fall wurde der Controller korrekt gefunden und instanziiert, aber der POST wurde aufgrund der angegebenen Standardaktion blockiert
Get
:quelle
Ich hatte genau das gleiche Problem. Ich suchte zwei Stunden lang ohne Glück, was falsch war, bis mir klar wurde, dass meine
POST
Methodeprivate
stattdessen warpublic
.Lustig jetzt zu sehen, dass die Fehlermeldung irgendwie generisch ist. Ich hoffe es hilft!
quelle
Stellen Sie sicher, dass Ihr Controller von der
Controller
Klasse erbt .Es könnte sogar verrückter sein, dass Sachen auch ohne das lokal funktionieren würden.
quelle
Mein POST-Handler hatte meinerseits folgende Form:
Ich fand heraus, dass ich die Argumente austauschen musste, dh zuerst die Körperdaten und dann den Routenparameter, wie folgt:
quelle