WebAPI múltiple HTTPGET de PostMan, error de punto final de coincidencia múltiple

Aug 25 2020

En mi webAPI tengo 3 métodos de controlador HTTPGET. Esto es lo que puedo llamar desde el cartero de Google y el método hasta ahora

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) 

pero obteniendo este error

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: la solicitud coincidió con varios puntos finales. Partidos:

no puede distinguir la diferencia de las otras llamadas GET.

Me gustaría pasar una cadena para pasar a la consulta por propiedad de nombre.

Se agradece cualquier ayuda. Gracias

Aquí está mi 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);
        }
}

Respuestas

1 RoarS. Aug 24 2020 at 22:24

Debe diferenciar entre sus métodos Get, eso se puede hacer modificando la ruta para Get (int id) con [HttpGet("{id:int}")]esto

    [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);
    }

Probado y verificado en mi computadora.