我在一个标准的.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]
属性来解决吗?
[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
-属性。这将解决你的问题