WebAPI più HTTPGET da PostMan, più errori di endpoint corrispondenti

Aug 25 2020

Nella mia webAPI ho 3 metodi di controller HTTPGET. Ecco cosa posso chiamare da Google Postman e il metodo finora

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) 

ma ottenendo questo errore

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: la richiesta corrisponde a più endpoint. Partite:

non può dire la differenza dalle altre chiamate GET.

Vorrei passare una stringa da passare alla proprietà query by name.

Qualsiasi aiuto è apprezzato. Grazie

Ecco la mia 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);
        }
}

Risposte

1 RoarS. Aug 24 2020 at 22:24

Devi differire tra i tuoi metodi Get, ciò può essere fatto modificando route per Get (int id) in [HttpGet("{id:int}")]questo modo

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

Testato e verificato sul mio computer.