Ich habe die folgende Aktion auf einem ApiController:
public string Something()
{
return "value";
}
Und ich habe meine Routen wie folgt konfiguriert:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
In der Beta hat dies einwandfrei funktioniert, aber ich habe gerade auf den neuesten Release Candidate aktualisiert und sehe jetzt Fehler bei Anrufen wie diesen:
Die angeforderte Ressource unterstützt die http-Methode 'GET' nicht.
Warum funktioniert das nicht mehr?
(Ich nehme an, ich könnte {action} loswerden und einfach eine Menge Controller herstellen, aber das fühlt sich chaotisch an.)
quelle
Alle oben genannten Informationen sind korrekt. Ich möchte auch darauf hinweisen, dass die
[AcceptVerbs()]
Anmerkung sowohl in den System.Web.Mvc- als auch in den System.Web.Http-Namespaces vorhanden ist.Sie möchten System.Web.Http verwenden, wenn es sich um einen Web-API-Controller handelt.
quelle
Obwohl dies keine Antwort auf das OP ist, hatte ich genau den gleichen Fehler aufgrund einer völlig anderen Grundursache. also für den Fall, dass dies jemand anderem hilft ...
Das Problem für mich war ein falsch benannter Methodenparameter, der dazu führte, dass WebAPI die Anforderung unerwartet weiterleitete. Ich habe die folgenden Methoden in meinem ProgrammesController:
DELETE-Anforderungen an ... / api / programme / 3 wurden nicht wie erwartet an DeleteProgramme weitergeleitet, sondern an GetProgrammeById, da DeleteProgramme keinen Parameternamen mit der ID hatte. GetProgrammeById lehnte dann natürlich das DELETE ab, da es als nur GETs akzeptierend markiert ist.
Das Update war also einfach:
Und alles ist gut. Dummer Fehler wirklich, aber schwer zu debuggen.
quelle
Wenn Sie Ihre Methode mit dekorieren
HttpGet
, fügen Sieusing
oben am Controller Folgendes hinzu :Wenn Sie verwenden
System.Web.Mvc
, kann dieses Problem auftreten.quelle
Dies ist sicherlich ein Wechsel von Beta zu RC. In dem in der Frage bereitgestellten Beispiel müssen Sie Ihre Aktion jetzt mit [HttpGet] oder [AcceptVerbs ("GET")] dekorieren.
Dies verursacht ein Problem, wenn Sie verbbasierte Aktionen (dh "GetSomething", "PostSomething") mit nicht verbbasierten Aktionen mischen möchten. Wenn Sie versuchen, die oben genannten Attribute zu verwenden, führt dies zu einem Konflikt mit jeder verbbasierten Aktion in Ihrem Controller. Eine Möglichkeit, dies zu erreichen, besteht darin, für jedes Verb separate Routen zu definieren und die Standardaktion auf den Namen des Verbs festzulegen. Dieser Ansatz kann zum Definieren untergeordneter Ressourcen in Ihrer API verwendet werden. Der folgende Code unterstützt beispielsweise: "/ resource / id / children", wobei id und children optional sind.
Hoffentlich werden zukünftige Versionen der Web-API dieses Szenario besser unterstützen. Derzeit ist ein Problem im Aspnetwebstack-Codeplex-Projekt http://aspnetwebstack.codeplex.com/workitem/184 protokolliert . Wenn Sie dies sehen möchten, stimmen Sie bitte über das Thema ab.
quelle
Haben Sie das gleiche Setup wie OP. Ein Controller mit vielen Aktionen ... weniger "chaotisch" :-)
In meinem Fall habe ich das "[HttpGet]" beim Hinzufügen einer neuen Aktion vergessen.
quelle
Gleiches Problem wie oben, aber sehr unterschiedliche Wurzel. Für mich war es so, dass ich einen Endpunkt mit einer https-Umschreiberegel erreichte. Das Drücken auf http verursachte den Fehler und funktionierte wie erwartet mit https.
quelle
Ersetzen Sie den folgenden Code in diesem Pfad
Pfad:
App_Start => WebApiConfig.cs
Code:
quelle
Ich weiß nicht, ob dies mit dem Beitrag des OP zusammenhängt, aber mir fehlte die Annotation [HttpGet], und genau das hat den Fehler verursacht, da die Methoden von @dinesh_ravva standardmäßig HttpPost sind.
quelle
Mein Problem war so einfach wie eine Nullreferenz, die in der zurückgegebenen Nachricht nicht angezeigt wurde. Ich musste meine API debuggen, um sie zu sehen.
quelle