路由从ASP.NET WebAPI迁移到ASP.NET Core WebAPI,模糊的方法问题

时间:2017-07-25 11:37:44

标签: c# asp.net-mvc asp.net-web-api asp.net-core asp.net-routing

我现有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异常。

任何可能的解决方案而不更改每个客户端应用程序的请求调用?

1 个答案:

答案 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
}
}

现在两个调用都可以在同一个函数中处理