Как вызвать метод GET, который принимает тот же тип параметра в веб-API - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть модель с именем Issues, в которой есть атрибуты Id и серьезности, которые являются целыми числами, и контроллер проблем, который должен обрабатывать запросы GET и возвращать все проблемы и по серьезности.Поскольку Dotnet API не поддерживает один и тот же тип параметра, например int, как мне это сделать?

Я пытался использовать разные имена методов, такие как Get() и GetBySeverity(int severity), но возникло неоднозначное исключение.

это мой контроллер

[Route("api/[controller]")]
[ApiController]
public class IssuesController : ControllerBase
{   

    [HttpGet(Name="issues")]
    public IEnumerable<Issue> GetAllIssues() {
            IssueService service = new IssueService();
            return service.GetIssues();
}

    [HttpGet]
    public IEnumerable<Issue> GetBySeverity([FromQuery(Name="severity")]int severity)
    {
        IssueService service = new IssueService();
        return service.GetIssuesBySeverity(severity);

    }


}

это API, которые я хочу разработать
/api/issues/
и
/api/issues/?severity=1

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Существует неоднозначная ссылка, потому что оба действия 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

0 голосов
/ 05 апреля 2019

как это

//GET api/issues/5
[HttpGet("{id}")]
public Issue GetByRoute([FromRoute(Name="id")] int id)
{
    IssueService service = new IssueService();
    return service.GetIssueById(id);
}   


[HttpGet()]
public Issue GetByQuery([FromQuery(Name="severity")] int severityId)
{
   IssueService service = new IssueService();
   return service.GetIssueById(severityId);
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...