Routing basierend auf dem Namen des Abfragezeichenfolgenparameters
Ich versuche, konfigurieren Sie das routing in meinem MVC4 WebAPI-Projekt.
Ich möchte in der Lage sein, um die Suche für Produkte, die basierend auf Ihren Namen oder Ihre Art so:
/api/products?name=WidgetX
- gibt alle genannten Produkte WidgetX
/api/products?type=gadget
- gibt alle Produkte von Typ gadget
Die Routen sind so konfiguriert:
config.Routes.MapHttpRoute(
name: "Get by name",
routeTemplate: "api/products/{name}",
defaults: new { controller = "ProductSearchApi", action = "GetProductsByName", name = string.Empty }
);
config.Routes.MapHttpRoute(
name: "Get by type",
routeTemplate: "api/products/{type}",
defaults: new { controller = "ProductSearchApi", action = "GetProductsByType", type = string.Empty }
);
Das problem ist, dass der name der query-string-parameter zu sein scheint, ignoriert, so dass der erste Weg ist immer der, der verwendet wird, unabhängig davon, ob der name der query-string-parameter.
Wie kann ich ändern, meinen Weg zu bekommen es richtig?
InformationsquelleAutor der Frage rickythefox | 2012-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie brauchen, ist einfach nur eine route unten, da der Abfrage-string wird nicht verwendet, als routing-Parameter:
Und dann definieren Sie zwei Methoden wie folgt:
Routing-Mechanismus ist smart genug, um die route Ihrer url zu Ihrem richtigen handeln auf der Grundlage der Namen von query-string, ob Sie den gleichen input-Parametern. Natürlich auf alle Methoden mit dem Präfix
Get
Müssen Sie möglicherweise, um dieses zu Lesen:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection
InformationsquelleAutor der Antwort Cuong Le
Brauchen Sie nicht, um Ihre Abfrage Parameter in der route. Sollte es nur eine einfache route anzeigen zu bedecken, Http-Methoden, die auf alle Ihre ApiControllers:
Die einzige Zeit, die Sie brauchen zum einstellen der Routen ist wenn Sie möchten, um einen parameter in dem Pfad, die Sie scheinen nicht, zu tun. Dann ist dein
GET
http-Methode für die Suche mit zwei Feldern wäre:Wenn Sie wollen explizit die Suche nach einem Feld zu einer Zeit, dann sollten Sie darüber nachdenken, mit verschiedenen Steuerungen, die für verschiedene Zwecke. Das heißt, ein
SearchProductByTypeController
mit einer einzigenGet(string type)
Methode. Die route wäre dann /api/SearchProductByTypeController?type=gadgetInformationsquelleAutor der Antwort Nick
versuchen
string.Empty
fürRouteParameter.Optional
InformationsquelleAutor der Antwort hagensoft
Sind Sie sicher, dass die Controller sind ok? Ich meine, die Namen der params.
InformationsquelleAutor der Antwort laszlokiss88