WebAPI múltiplo HTTPGET de PostMan, múltiplo correspondência endpoint erro

Aug 25 2020

Em meu webAPI, tenho 3 métodos de controlador HTTPGET. Aqui está o que posso chamar do Google Postman e o método até agora

selected GET postman with http://localhost:51970/user
successfully calls API: public ActionResult<IEnumerable<User>> Get()

selected GET postman with http://localhost:51970/user/1
successfully calls API: public ActionResult<User> Get(int id)



I tried string parameter but get multiple matching GET endpoints
[HttpGet("{code}")]
I tried public ActionResult<User> Get(string name) 

mas recebendo este erro

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: a solicitação correspondeu a vários pontos de extremidade. Partidas:

ele não consegue diferenciar das outras chamadas GET.

Gostaria de passar uma string para passar para a propriedade query by name.

Qualquer ajuda é apreciada. obrigado

Aqui está minha API

    [Route("[controller]")]
    [ApiController]
    public class UserController : ControllerBase
    {

        private readonly IUserService userService;

        public UserController (IUserService _userService)
        {
            userService= _userService;
        }

        [HttpGet]
        public ActionResult<IEnumerable<User>> Get()
        {
                var users= userService.GetUsers();
                return Ok(users);
        }

        [HttpGet("{id}")]
        public ActionResult<User> Get(int id)
        {
                var user= userService.GetUserById(id);
                return Ok(user);
        }


        [HttpGet("{code}")]
        public ActionResult<User> Get(string name)
        {
                var user= claimService.GetUserByName(name);
                return Ok(user);
        }
}

Respostas

1 RoarS. Aug 24 2020 at 22:24

Você precisa diferenciar entre seus métodos Get, que podem ser feitos modificando a rota para Get (int id) com [HttpGet("{id:int}")]esta

    [HttpGet("{id:int}")]
    public ActionResult<User> Get(int id)
    {
      var user= userService.GetUserById(id);
      return Ok(user);
    }

    [HttpGet("{code}")]
    public ActionResult<User> Get(string code)
    {
      var claimf = claimService.GetClaimsByCode(code);
      return Ok(claimf);
    }

Testado e verificado no meu computador.