Существует неоднозначная ссылка, потому что оба действия HttpGet
, и механизм маршрутизации не может решить, какой маршрут выбрать или какой маршрут вы выбрали.
Маршрутизаторы Web Api маршрутизируют, используя HttpVerbs, а не имя действия / метода(как MVC).
Я бы использовал Маршрутизация атрибутов с атрибутами Http [Verb] .Для определения маршрута используется Route("myroute")
.
// GET api/issues/severity/5
[Route("severity/{severity}")]
[HttpGet()]
public IEnumerable<Issue> GetBySeverity(int severity)
{
IssueService service = new IssueService();
return service.GetIssuesBySeverity(severity);
}
// GET api/issues/5
[HttpGet("{id}")]
public Issue Get(int id)
{
IssueService service = new IssueService();
return service.GetIssueById(id);
}
Вышеуказанные методы будут перенаправлять на api/issues/1
и api/issues/severity/1
.Если вы хотите отобразить, используя параметр запроса, а не параметр url, то должны работать следующие параметры:
// GET api/issues/severity?severity=5
[HttpGet("severity")]
public IEnumerable<Issue> GetBySeverity([FromQuery] int severity)
{
IssueService service = new IssueService();
return service.GetIssuesBySeverity(severity);
}
// GET api/issues?id=5
[HttpGet()]
public Issue Get([FromQuery] int id)
{
IssueService service = new IssueService();
return service.GetIssueById(id);
}
Вышеуказанные действия будут направлены на api/issues?id=1
и api/issues/severity?severity=1