0

Ich habe ASP.NET WebAPI, die ich auf ASP.NET Core WebAPI migrieren möchte, aber einige Probleme im Routing konfrontiert.Routingmigration von ASP.NET WebAPI nach ASP.NET Core WebAPI, mehrdeutiges Methodenproblem

Die APIs sind bereits von vielen Clients verbraucht und ich kann die Routen (oder URLs) nicht ändern. Wir haben einen Controller (sagen ValuesController) mit 2 Get-Methoden, aber verschiedene Parameter:

public async Task<IEnumerable<string>> Get(int xId, int yId)

public async Task<IEnumerable<string>> Get(int xId, int yId, int aId, int bId)

Im aktuellen Szenario (ASP.NET WebAPI), werden alle Kunden sind in der Lage, beide Methoden rufen die Basis verschiedenen Parameter wie:

für Aufruf der Methode zuerst, kann man zu URL anfordern: http://localhost:4040/api/Values?xId=1&yId=2 und für zweite, können Sie auf URL anfordern: http://localhost:4040/api/Values?xId=1&yId=2&aId=3&bId=4. Und es wird automatisch durch das aktuelle Routing mit ASP.NET WebAPI

entscheidet Aber im Falle von ASP.NET Core, wenn ich an die gleiche URL anfordern, löst es die Ausnahme Microsoft.AspNetCore.Mvc.Internal.AmbiguousActionException: Multiple actions matched.

Jede mögliche Lösung, ohne den Anfrageanruf für jede Klientenanwendung zu ändern?

Antwort

0

Wenn möglich, warum machen Sie es dann nicht zu einer einzigen Funktion? dies ist die Art, wie ich denke, ohne andere zu stören Code dh

public async Task<IEnumerable<string>> Get(int xId, int yId, int aId=0, int bId = 0) 
{ 
if(aID>0 && bId>0) 
{ 
//Your second controller code here 
return your result 
} 
else 
{ 
//Your second controller code here 
return your result 
} 
} 

jetzt beide Anrufe können in derselben Funktion

+0

Vielen Dank für Ihre Antwort behandelt werden ... ja ... das ist, was habe ich schon als Work around implementiert. Ich habe gerade gesucht, ob etwas in ASP.NET Core WebAPI verfügbar ist, wie in ASP.NET WebAPI. Wie jedes Paket oder etwas, was bei der Aktionsauswahl auf der Grundlage der Anzahl der Parameter helfen kann ... Ich bin nicht sicher, warum diese Funktion nicht im Kern ist. –