【发布时间】:2019-07-01 09:32:52
【问题描述】:
我有这个 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);
}
}
UsersController 如下:
[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);
}
}
如何在 CreatedAtRoute 方法中寻址 UsersController?
【问题讨论】:
标签: c# asp.net-core asp.net-core-routing