PostManからのWebAPI複数HTTPGET、複数の一致するエンドポイントエラー

Aug 25 2020

私のwebAPIには、3つのHTTPGETコントローラーメソッドがあります。これが私がグーグルポストマンから呼び出すことができるものとこれまでの方法です

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) 

しかし、このエラーが発生します

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:要求が複数のエンドポイントに一致しました。一致:

他のGET呼び出しとの違いはわかりません。

nameプロパティでクエリに渡す文字列を渡したいのですが。

どんな助けでも大歓迎です。ありがとう

これが私の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);
        }
}

回答

1 RoarS. Aug 24 2020 at 22:24

あなたはと得るためにルートを変更することによって行うことができますあなたのGet-方法、(int型のID)間で異なる必要があり[HttpGet("{id:int}")]、このような

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

私のコンピューターでテストおよび検証されました。