无法在我的存储库 C# .NET core 中返回 Ok() 、 Unauthorized()、BadRequest()

问题描述 投票:0回答:2

我实现了一个

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);
}
c# asp.net-mvc asp.net-core model-view-controller
2个回答
8
投票

BadRequest()
是控制器本身的一个方法。

最好从

IUserRepository
返回一个值,例如null 或 token,然后在控制器中将该值映射到
Ok
BadRequest
响应。
决定响应类型是控制器本身的责任。
放置在控制器中的这样的代码应该可以完成这项工作:

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

-1
投票

可以通过返还EG来实现。

new BadRequestObjectResult("some error");

但是,您不应该在存储库中执行任何与 Web 相关的操作!

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

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

BadRequest 意味着请求有问题 - 也许用户名或密码为空等。在尝试访问存储库之前应该检查这一点。

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

然后,如果确实存在错误,请不要隐藏它,稍后当您有很多无法调试的端点时,它会导致问题,返回 500 响应(但不要在生产中包含异常详细信息)

© www.soinside.com 2019 - 2024. All rights reserved.