【问题标题】:Routing migration from ASP.NET WebAPI to ASP.NET Core WebAPI, ambiguous method issue从 ASP.NET WebAPI 到 ASP.NET Core WebAPI 的路由迁移,方法不明确的问题
【发布时间】:2017-07-25 11:37:43
【问题描述】:

我有现有的 ASP.NET WebAPI,我想迁移到 ASP.NET Core WebAPI,但在路由方面遇到了一些问题。

API 已被许多客户端使用,我无法更改路由(或 URL)。我们有一个控制器(比如 ValuesController),它有 2 个 Get 方法,但参数不同:

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 和第二个,您可以请求 URL: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 异常。

在不更改每个客户端应用程序的请求调用的情况下有任何可能的解决方案吗?

【问题讨论】:

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


    【解决方案1】:

    如果可能,那你为什么不把它变成一个函数呢? 这是我在不打扰其他代码的情况下思考的方式 即

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

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

    【讨论】:

    • 感谢您的回复...是的...这是我已经实施的解决方法。我只是想看看 ASP.NET Core WebAPI 中是否有与我们在 ASP.NET WebAPI 中相同的东西。像任何包或其他东西一样,它可以根据参数数量帮助进行动作选择......我不确定为什么核心中没有这个功能......
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2017-11-27
    • 1970-01-01
    • 2017-04-04
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多