2

Ist es möglich, API-Routing für Überladungsfunktionen zu unterscheiden?Unterscheiden von ASP.NET-Kernattribut-basiertem Routing für das Überladen von Funktionen

Zum Beispiel habe ich folgende Funktionen:

[HttpGet("filter")] 
public JsonResult GetCity (int id) { ... } 

[HttpGet("filter")] 
public JsonResult GetCity (int id, string name) { ... } 

Ich möchte die erste Funktion aufrufen, wenn der Benutzer es nennen durch

http://localhost:5000/api/cities/filter?id=1 

und den zweiten Anruf mit

http://localhost:5000/api/cities/filter?id=1&name=NewYork 

Können wir es mit dem vorgeschlagenen Format erreichen?

Ich meine mit ?paramter=value nicht mit nach vorn wie http://localhost:5000/api/cities/filter/1/NewYork schlitzt

+0

Aktion Methoden nicht unterstützen Überlastungen. –

Antwort

4

Sie nicht zwei Aktionen wie das haben kann, nicht. Wenn eine Aktion aufgerufen wird, werden nur die erforderlichen Parameter angezeigt, und alle bereitgestellten Parameter, die die Aktion nicht benötigt, werden ignoriert.

Also Anruf id=1&name=NewYork wird zu GetCity (int id) passen, weil alles, was es braucht, ist id, und name wird ignoriert.

Aber natürlich passt es auch zu GetCity (int id, string name).

Was Sie tun können, halten ist nur eine Aktion und rufen Sie eine andere Methode, wenn die name nicht vorgesehen ist, wie folgt aus:

[HttpGet("filter")] 
    public JsonResult GetCity(int id, string name) { 
     if (name == null) return GetCityWithId(id); 
     ... 
    } 

    private JsonResult GetCityWithId(int id) { 
     ... 
    } 
Verwandte Themen