Hinzufügen einer expliziten Aktionsroute zu ASP.NET Web API Controller
Habe ich eine ASP.NET Web-API-Projekt mit einem ApiController
bietet eine User
- Endpunkt mit den folgenden Aktionen:
GET /api/User
POST /api/User
DELETE /api/user
Möchte ich Folgendes zu bieten Endpunkt:
GET /api/user/metrics
Allerdings, wenn ich definieren, die controller-Aktion, etwa so:
[HttpGet]
public HttpResponseMessage Metrics()
{
return null;
}
Bekomme ich die Multiple actions were found that match the request
Fehlermeldung.
Verstehe ich das verstößt gegen die definition eines "reinen" REST-API, aber das ist, wie ich möchte, es zu tun. Ich Stelle mir vor ich haben, um dieses problem zu lösen durch die Zuordnung eine HTTP-route, aber ich habe versucht, ein paar Routen und ich kann nicht ankommen es zu wirken. Was sollte mein Weg Aussehen?
InformationsquelleAutor der Frage user2719100 | 2014-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die default-route beinhaltet nicht die Aktion.
Wählt Sie Aktionen basierend auf dem controller, HTTP-verb und die parameter, oder fehlt der parameter in der route. So, es ist die Suche nach dem richtigen controller und auf der Suche für eine Aktion zu ERHALTEN ohne parameter. Es findet zwei.
Sollten Sie eine zusätzliche route, umfasst die Aktion. Dies ist entweder mit Attribut-basiertes routing als Kiran erwähnt oder durch Konvention based routing. Für die convention-based routing, die route ist in der Regel platziert in der
Application_start()
Methode derWebApiConfig.cs
. Mehr spezifischen Routen zu gehen, bevor das Allgemeine Routen, also Routen würden dann wie folgt Aussehen:InformationsquelleAutor der Antwort clhereistian
Wenn Sie über eine Web-API-2 -, würde ich vorschlagen, zu verwenden Attribut-routing, macht die Erfahrung einfacher für Szenarien, wie diese.
Können Sie weiterhin mit der herkömmlichen Standard-route für die Mehrheit der Szenarien, sondern können Attribut-routing in Orten, wo Sie erforderlich sind, um, wie in Ihrem aktuellen Szenario.
Folgende Beispiel zeigt ein ähnliches Szenario:
http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/WebApiAttributeRoutingSample/WebApiAttributeRoutingSample/Controllers/Api/CustomersController.cs
InformationsquelleAutor der Antwort Kiran Challa