我现有ASP.NET WebAPI,我想迁移到ASP.NET Core WebAPI,但在路由方面遇到一些问题。
许多客户已经使用了API,我无法更改路由(或URL)。我们有一个带有2个Get方法但不同参数的控制器(比如ValuesController):
public async Task<IEnumerable<string>> Get(int xId, int yId)
public async Task<IEnumerable<string>> Get(int xId, int yId, int aId, int bId)
在当前场景(ASP.NET WebAPI)中,所有客户端都能够根据不同的参数调用这两种方法,如:
首先调用方法,可以请求URL:
http://localhost:4040/api/Values?xId=1&yId=2
,对于第二个,您可以请求网址:http://localhost:4040/api/Values?xId=1&yId=2&aId=3&bId=4
。它由ASP.NET WebAPI提供的当前路由自动决定
但是对于ASP.NET Core,如果我请求相同的URL,它会抛出Microsoft.AspNetCore.Mvc.Internal.AmbiguousActionException: Multiple actions matched
异常。
任何可能的解决方案而不更改每个客户端应用程序的请求调用?
答案 0 :(得分:0)
如果可能那么为什么你不把它变成一个单一的功能? 这是我的想法,而不会打扰其他代码 即
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
}
}
现在两个调用都可以在同一个函数中处理