我实现了一个
IUserRepository
,在我的UserRepository
中实现了登录和注册;这是我的代码
public async Task<IActionResult> LoginAsync([FromBody] UserCred user)
{
var result = await _signInManager.PasswordSignInAsync(user.username, user.password, user.rememberMe, false);
if (result.Succeeded)
{
var token = _jwtAuthenticationManager.Authenticate(user.username, user.password);
if (token == null)
return Unauthorized();
return Ok(token);
}
return BadRequest();
}
但是,我收到错误:
名称“BadRequest”在当前上下文中不存在
Ok
和Unauthorized
也一样。
但是,当我直接在我的
userController
中实现这些调用时,我没有遇到这个问题。我想我只能在控制器中返回BadRequest
?有什么办法可以克服这个问题,因为如果不是IActionResult
,我将如何检查是否results.Succeeded
?
而且,这是我的
UserController
:
[HttpPost]
[AllowAnonymous]
[Route("login")]
public async Task<IActionResult> Login([FromBody] UserCred user)
{
return await _userRepository.LoginAsync(user);
}
BadRequest()
是控制器本身的一个方法。
最好从
IUserRepository
返回一个值,例如null 或 token,然后在控制器中将该值映射到 Ok
或 BadRequest
响应。 token = await _userRepository.LoginAsync(user);
return token == null ? BadRequest() : Ok(token);
可以通过返还EG来实现。
new BadRequestObjectResult("some error");
但是,您不应该在存储库中执行任何与 Web 相关的操作!
相反,您应该从存储库中抛出适当的异常并在控制器中捕获它。然后,当您捕获异常时,从那里返回 BadRequest。
此外,请确保您返回正确的响应。
BadRequest 意味着请求有问题 - 也许用户名或密码为空等。在尝试访问存储库之前应该检查这一点。
如果身份验证失败,未经授权可能是更好的响应。
然后,如果确实存在错误,请不要隐藏它,稍后当您有很多无法调试的端点时,它会导致问题,返回 500 响应(但不要在生产中包含异常详细信息)