.Net Core 操作结果<bool>总是返回 false?



我正在创建一个 API 服务器,我正在使用服务来验证某些输入,它的方法返回 ActionResult,这样如果值为 false,我可以返回 403/404/200 结果。当我的方法返回此值时,结果似乎是。值总是假的?

我试图简单地检查 ActionResult 是否为状态代码 200 并跳过该部分,但似乎没有办法这样做(这似乎是正确的(

验证方法:

public async Task<ActionResult<bool>> CanUpdateUser(ClaimsPrincipal user, Organisation org, string userId)
{
if (org == null)
return StatusCode(404, ApiResponseConstants.OrganisationDoesntExist);
if (!org.UserIsMember(user))
return StatusCode(403, ApiResponseConstants.NotOrganisationMember);
if (!org.UserHasPermission(user, OrganisationPermissions.EditOrgUsers))
return StatusCode(403, ApiResponseConstants.NoPermission);
ResponseUser responseUser = await GetResponseUserAsync(org, userId);
if (responseUser == null)
return StatusCode(404, ApiResponseConstants.UserDoesntExist);
if (userId.Equals(org.Owner, StringComparison.OrdinalIgnoreCase))
return StatusCode(403, "Organisation owners cannot be updated");
string currentUserId = user.Claims.First(claim => claim.Type.Equals("sub")).Value;
return userId.Equals(currentUserId, StringComparison.OrdinalIgnoreCase) ? StatusCode(403, "Organisation users cannot update themselves") : Ok(true);
}
private static OkObjectResult Ok(object value)
{
return new OkObjectResult(value);
}
private static ObjectResult StatusCode(int statusCode, object value)
{
return new ObjectResult(value)
{
StatusCode = statusCode
};
}

使用验证方法的控制器方法:

public async Task<ActionResult<bool>> CanUpdateUser(string organisation, string user, bool respond200 = true)
{
Organisation org = await _verificationService.VerifyOrganisation(organisation);
ActionResult<bool> result = await _canUserService.CanUpdateUser(User, org, user);
return respond200 ? Ok(result.Value) : result;
}

我希望当我做Ok(true)result.Value == true,但它是假的?如果我在 StatusCode 方法中放置调试器断点ObjectResult.Value == true那么这两个方法之间发生了一些奇怪的事情?

编辑:

请注意,我使用的是.Net Core 2.2

我认为你的逻辑在这一行代码中是错误的

return userId.Equals(currentUserId, StringComparison.OrdinalIgnoreCase) ? StatusCode(403, "Organisation users cannot update themselves") : Ok(true);

而是尝试更改为此内容以查看它是否有效

return userId.Equals(currentUserId, StringComparison.OrdinalIgnoreCase) ? StatusCode(403, "Organisation users cannot update themselves") : true;

最新更新