【问题标题】:ASP.NET Core WebApi : AmbiguousMatchException: The request matched multiple endpointsASP.NET Core WebApi:AmbiguousMatchException:请求匹配多个端点
【发布时间】:2020-11-24 08:01:41
【问题描述】:

我在标准 .NET Core WebApi 项目中有这个控制器代码:

[ApiController]
[Route("[controller]")]
public class MessageController : ControllerBase
{
  [HttpGet]
  public string GetByTransactionId([FromRoute(Name = "transactionId")] string transactionId)
  {
    return "transactionId";
  }

  [HttpGet]
  public string GetByNumber([FromRoute(Name = "number")] string number)
  {
    return "number";
  }
}

我想像这样访问 api:

  • https://localhost:44316/Message?transactionId=abc
  • https://localhost:44316/Message?number=foobar

当访问端点 URL 时,例如:https://localhost:44316/Message?transactionId=abc,我收到如下错误:

AmbiguousMatchException: The request matched multiple endpoints. Matches:

Server.Controllers.MessageController.GetByTransactionId (Server)
Server.Controllers.MessageController.GetByNumber (Server)

这可以通过使用正确的[HttpGet][Route] 属性来解决吗?

【问题讨论】:

    标签: asp.net-web-api routes http-get


    【解决方案1】:
        [ApiController]
        [Route("[Message]")]
        public class MessageController : ControllerBase
        {
          [HttpGet]
          [Route("transactionId")]
          public string GetByTransactionId([FromRoute(Name = "transactionId")] string transactionId)
          {
            return "transactionId";
          }
        
          [HttpGet]
          [Route("number")]
          public string GetByNumber([FromRoute(Name = "number")] string number)
          {
            return "number";
          }
        }
    

    尝试使用 Route-attribute 。这将解决您的问题

    【讨论】:

    • 对不起,这对我不起作用。我现在在两个网址上都得到了 404。
    • 你访问的api url是错误的。试试这个 .localhost:44316/controller/GetByTransactionId?transactionId=abc
    • 但在我的情况下,我想访问 /Message 上的两个端点
    • 我已经修改了代码并立即尝试。(请确保您的请求中的路线拼写完全相同)
    • 它就像一个魅力!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多