无法在存储库 c# .net 核心中返回 Ok() 、Unauthorized()、BadRequest()



我实现了一个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";在当前上下文中不存在

OkUnauthorized相同。

然而,当我在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,然后在控制器中将该值映射到OkBadRequest响应
控制器自己负责决定响应类型
放置在控制器中的类似代码应该完成任务:

token = await _userRepository.LoginAsync(user);
return token == null ? BadRequest() : Ok(token);

可以通过返回EG.

new BadRequestObjectResult("some error");

但是,你不应该在存储库中做任何与网络相关的事情

相反,您应该从存储库中抛出一个适当的异常,并在控制器中捕获它。然后,当您捕捉到异常时,从那里返回BadRequest。

此外,请确保您返回的是正确的响应。

BadRequest意味着请求有问题——可能用户名或密码为null等。甚至在尝试访问存储库之前,都应该检查这一点。

如果身份验证失败,未经授权可能是更好的响应。

然后,如果真的有错误,不要隐藏它,当你有很多无法调试的端点时,它会在以后引起问题,返回500响应(但不包括生产中的异常详细信息(

最新更新