Mehrere Aktionen für dasselbe HttpVerb

8

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.

    
Alfero Chingono 29.10.2012, 01:51
quelle

3 Antworten

2

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

    
Alfero Chingono 29.11.2012, 18:39
quelle
6

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:

tugberk 29.10.2012 20:09
quelle
-3

Entfernen Sie zunächst [HttpPut, ActionName("")] und ändern Sie dann Ihre Route zu diesem

%Vor%     
Yasser 29.10.2012 07:15
quelle