Search code examples
c#swagger

Get error swagger when change method private to public


This is my code in UserController and it runs well.

private Identifier GetCurrentUser()
        {
            var identity = HttpContext.User.Identity as ClaimsIdentity;
            if (identity != null)
            {
                var userClaims = identity.Claims;
                return new Identifier
                {
                    Id = userClaims.FirstOrDefault(o => o.Type == ClaimTypes.NameIdentifier)?.Value,
                    Role = userClaims.FirstOrDefault(o => o.Type == ClaimTypes.Role)?.Value,
                };
            }
            return null;
        }

enter image description here However when I change this method from private to public I got this error with swagger. enter image description here I do not understand why I get this error. Please tell me the reason and teach me how to fix it. Thank for your attention


Solution

  • Like it has been pointed out in the comment, you have conflicting route names with api/GetUsers/{search} and api/GetUsers/{id}. It becomes difficult for the compiler to figure out which one you really want to use.

    I recommend you change the GetUserById action method to this form so there's a distinction between the two routes.

    [HttpGet("\GetUser\{id}")]
    [Authorize(Roles = "Administrator,Staff")]
    public IActionResult GetUser(string id)
    

    Alternatively you could place the search term for GetUsers in the same class as the paginationFilter like this

    public class SearchAndPagination
    {
        public PaginationFilter paginationFilter {get;set;}
        public string search {get;set;}
    }
    

    Then pass as request body to GetUsers action

    [HttpGet]
    [Authorize(Roles = "Administrator,Staff")]
    public IActionResult GetUsers([FromBody] SearchAndPagination paginationFilter)
    {
        var users = _userRepository.GetUsers(paginationFilter.paginationFilter, paginationFilter.search);
        ...
    }