【发布时间】:2020-04-09 14:32:59
【问题描述】:
我有一个带有两个动作的控制器。每个操作都采用一个 GUID 参数。我的请求 URL 如下所示: http://baseURL/api/v1.0/loadfactors/search?cedentId=5FF7165C-7575-EA11-AA4D-949554C02DE1
这就是我的动作的样子:
[HttpGet("search")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<List<LoadFactorResource>> GetByLobSettingsId([FromQuery]Guid lobSettingsId)
{
return await _service.GetByLobSettingsId(lobSettingsId);
}
[HttpGet,Route("search")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<List<LoadFactorResource>> GetByAccountId([FromQuery]Guid cedentId)
{
return await _service.GetByCedentId(cedentId);
}
现在,当我提出请求时,这是我得到的错误:
处理请求时发生未处理的异常。 AmbiguousMatchException:请求匹配多个端点。匹配:
LoadFactorsController.GetByLobSettingsId (Api) LoadFactorsController.GetByAccountId (Api)
它似乎正在查找多个操作,而不是根据查询参数识别操作。如何根据参数进行匹配?
谢谢。
【问题讨论】:
-
方法签名是相同的(相同的路由,相同的 GUID 参数),因此没有任何区别。默认情况下,不考虑查询参数的名称。在这个类似的问题中尝试 IActionConstraint 响应:stackoverflow.com/questions/46477959/…
-
你能把你的 api 改成 [HttpGet("search/LobSettingsId/{lobSettingsId:Guid}")] 和 [HttpGet("search/AccountId/{accountId:Guid}")] 那么它是明确每个人做了什么并且应该避免错误
-
@Rosco 不,我不能。我想了想,但是服务已经被客户端消费了,我只需要添加另一个查询字符串参数。
-
@BryanLewis 谢谢你成功了!
标签: asp.net-core asp.net-web-api