C# ASP.NET Core 2.2-复杂路由的CreatedAtRoute方法失败

C# ASP.NET Core 2.2-复杂路由的CreatedAtRoute方法失败,c#,asp.net-core,asp.net-core-routing,C#,Asp.net Core,Asp.net Core Routing,我有一个AuthController,我想使用CreatedAtRoute方法在UsersController中运行一个操作以返回插入的用户,但它给出了以下错误: InvalidOperationException: No route matches the supplied values. 此处显示了AuthController。用户注册,成功注册后,将调用UsersController的GetUser操作: [Route("api/[controller]")] [ApiContr

我有一个AuthController,我想使用CreatedAtRoute方法在UsersController中运行一个操作以返回插入的用户,但它给出了以下错误:

InvalidOperationException: No route matches the supplied values.
此处显示了AuthController。用户注册,成功注册后,将调用UsersController的GetUser操作:

[Route("api/[controller]")]
    [ApiController]
    public class AuthController : ControllerBase
    {
        private readonly IConfiguration _config;
        private readonly ITokenService _tokenService;
        private readonly IMapper _mapper;
        private readonly UserManager<User> _userManager;
        private readonly IUserService _userService;
        private readonly SignInManager<User> _signInManager;
        private readonly ILogger _logger;

        public AuthController(IConfiguration config,
           ITokenService tokenService,
           IMapper mapper,
           UserManager<User> userManager,
           SignInManager<User> signInManager,
           IUserService userService,
           ILogger<AuthController> logger)
        {
            _tokenService = tokenService;
            _userManager = userManager;
            _signInManager = signInManager;
            _mapper = mapper;
            _config = config;
            _userService = userService;
            _logger = logger;
        }
        [AllowAnonymous]
        [HttpPost("register")]
        public async Task<IActionResult> Register([FromBody]UserForRegisterDto userForRegisterDto)
        {
            _logger.LogInformation(LoggingEvents.InsertItem, "Registering user {UserName}", userForRegisterDto.UserName);
            var userToCreate = _mapper.Map<User>(userForRegisterDto);

            var result = await _userManager.CreateAsync(userToCreate,"1234567a" /*userForRegisterDto.Password*/);

            var userToReturn = _mapper.Map<UserForLoginReturnDto>(userToCreate);

            if (result.Succeeded)
            {
                _logger.LogInformation(LoggingEvents.InsertItem, "Registering user {UserName}", userForRegisterDto.UserName);
                return CreatedAtRoute("GetUser",
                    new { controller = "Users", id = userToCreate.Id }, userToReturn);
            }
            _logger.LogError(LoggingEvents.InsertItem, "Registering user failed: {UserName}", userForRegisterDto.UserName);
            return BadRequest(result.Errors);
        }
}
[路由(“api/[控制器]”)]
[ApiController]
公共类AuthController:ControllerBase
{
专用只读IConfiguration\u config;
专用只读ITokenService(令牌服务);
专用只读IMapper\u映射器;
私有只读用户管理器_UserManager;
专用只读IUserService\u userService;
专用只读签名管理器\u签名管理器;
专用只读ILogger\u记录器;
公共授权控制器(IConfiguration配置,
ITokenService令牌服务,
IMapper映射器,
用户管理器用户管理器,
SignInManager SignInManager,
IUserService用户服务,
ILogger(记录器)
{
_令牌服务=令牌服务;
_userManager=userManager;
_signInManager=signInManager;
_映射器=映射器;
_config=config;
_userService=userService;
_记录器=记录器;
}
[异名]
[HttpPost(“注册”)]
公共异步任务寄存器([FromBody]UserForRegisterTo UserForRegisterTo)
{
_logger.LogInformation(LoggingEvents.InsertItem,“注册用户{UserName}”,userForRegisterDto.UserName);
var userToCreate=\u mapper.Map(userForRegisterDto);
var result=await_userManager.CreateAsync(userToCreate,“1234567a”/*userForRegisterDto.Password*/);
var userToReturn=\u mapper.Map(userToCreate);
if(result.successed)
{
_logger.LogInformation(LoggingEvents.InsertItem,“注册用户{UserName}”,userForRegisterDto.UserName);
返回CreatedAtRoute(“GetUser”,
新建{controller=“Users”,id=userToCreate.id},userToReturn);
}
_logger.LogError(LoggingEvents.InsertItem,“注册用户失败:{UserName}”,userForRegisterTo.UserName);
返回错误请求(result.Errors);
}
}
用户控制器如下所示:

[Route("api/users/{userId}/users")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        private readonly IUserService _userService;
        private readonly IMapper _mapper;
        private readonly UserManager<User> _userManager;
        public UsersController(IUserService userService,
            UserManager<User> userManager,
            IMapper mapper)
        {
            _userService = userService;
            _userManager = userManager;
            _mapper = mapper;
        }


        [Authorize(Roles = "Admin, Manager, User")]
        [HttpGet("{id}", Name = "GetUser")]
        public async Task<IActionResult> GetUser(int id)
        {
            var isCurrentUser = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value) == id;

            var user = await _userService.GetUser(id, isCurrentUser);

            var userToReturn = _mapper.Map<UserForLoginReturnDto>(user);

            return Ok(userToReturn);
        }
}
[路由(“api/users/{userId}/users”)]
[ApiController]
公共类UsersController:ControllerBase
{
专用只读IUserService\u userService;
专用只读IMapper\u映射器;
私有只读用户管理器_UserManager;
公共用户控制器(IUserService用户服务,
用户管理器用户管理器,
IMapper(映射器)
{
_userService=userService;
_userManager=userManager;
_映射器=映射器;
}
[授权(角色=“管理员、经理、用户”)]
[HttpGet(“{id}”,Name=“GetUser”)]
公共异步任务GetUser(int-id)
{
var isCurrentUser=int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)==id;
var user=await\u userService.GetUser(id,isCurrentUser);
var userToReturn=\u mapper.Map(用户);
返回Ok(用户返回);
}
}

如何在CreatedAtRoute方法中寻址UsersController?

这是一个路由问题。您缺少目标管线的值

return CreatedAtRoute("GetUser", new { id = userToCreate.Id, userId = {some value here} }, userToReturn);