Ich habe einen Web-API-Controller mit den folgenden Aktionen:
%Vor%Und die folgenden Routen zugeordnet:
%Vor%Wenn ich die folgenden Anfragen mache, funktioniert alles wie erwartet:
%Vor%Aber wenn ich versuche, eine Anfrage zu stellen:
%Vor%Ich bekomme die folgende Ausnahme:
%Vor%Ich habe versucht, der Standardroute einen leeren Aktionsnamen hinzuzufügen, aber das hat nicht geholfen:
%Vor%Irgendwelche Ideen, wie ich Standard-REST-Routing mit benutzerdefinierten Aktionsnamen kombinieren kann?
EDIT: Der Routing-Mechanismus wird nicht durch die Wahl des Controllers verwirrt. Es ist verwirrt durch die Wahl von Aktion auf einem einzigen Controller. Was ich brauche, ist die Standardaktion, wenn keine Aktion angegeben ist. Hoffnung, die Dinge klarstellt.
Mit Hilfe von Giscard Biamby habe ich diese Antwort , die mich in die richtige Richtung wies. Schließlich, um dieses spezifische Problem zu lösen, habe ich es so gemacht:
%Vor%Danke @GiscardBiamby
Dies ist ein erwarteter Fehler vom Standard-Aktions-Selektor, der ApiControllerActionSelector
ist. Sie haben grundsätzlich drei Aktionsmethoden, die HTTP Put
verb entsprechen. Beachten Sie auch, dass der Standardaktionsselektor einfache Aktionsparametertypen berücksichtigt, die alle primitiven .NET-Typen, bekannte einfache Typen sind ( System.String
, System.DateTime
, System.Decimal
, System.Guid
, System.DateTimeOffset
, System.TimeSpan
) und darunterliegende einfache Typen (zB: Nullable<System.Int32>
).
Als Lösung für Ihr Problem würde ich zwei Controller für die folgenden erstellen:
%Vor%Die Routen würden wie folgt aussehen:
%Vor%Auf der anderen Seite (nicht vollständig mit Ihrem Thema verbunden), habe ich drei Blog-Beiträge zur Auswahl von Aktionen, insbesondere mit komplexen Typparametern. Ich ermutige Sie, sie zu überprüfen, da sie Ihnen vielleicht ein paar Perspektiven geben können:
Tags und Links asp.net-web-api c# asp.net-web-api-routing