繁体   English   中英

如何使用布尔值返回BadRequest?

[英]How to return a BadRequest with a boolean?

我有一个用于验证令牌的控制器方法。 我将它设置为返回一个布尔值,然后在前端(对控制器进行API调用)中设置了一个if / else if块来处理结果。

如果结果为假,我想抛出一个BadRequest,以便向用户显示错误消息。 我真的希望在后端而不是在前端处理。 我以为也许可以在ActionResult中包装一个布尔值,但这似乎不起作用。 它仅在返回true或false时才有效(我知道,它是一个布尔值,因此应该很明显,但是我认为ActionResult包装器可能会让我返回BadRequest)。

关于如何执行此操作的任何建议?

public async Task<ActionResult<bool>> ValidateStuff(params)
{
    return BadRequest("BAD REQUEST!");
}

别!

如果您想解决这个问题,那很好。 但是不要返回错误的错误代码。

您可以编写自定义的Authorization或Access装饰器([示例文档]) 1并返回401。

但是,不要随意返回不等于问题的代码,因为这些标准已得到很好的定义和理解。

最后: 使用HttpResponse的另一个示例

 var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" };
 throw new HttpResponseException(msg);

记录了如何处理不同的返回类型。

请参阅ASP.NET Core Web API中的控制器动作返回类型

IActionResult类型

如果一个动作中可能有多个ActionResult返回类型,则IActionResult返回类型是适当的。 ActionResult类型表示各种HTTP状态代码。 属于此类别的一些常见返回类型是BadRequestResult (400), NotFoundResult (404)和OkObjectResult (200)。

因为操作中有多个返回类型和路径,所以必须自由使用[ProducesResponseType]属性。 此属性为由Swagger之类的工具生成的API帮助页面生成更具描述性的响应详细信息。 [ProducesResponseType]指示该操作将返回的已知类型和HTTP状态代码。

同步动作

考虑以下同步操作,其中有两种可能的返回类型:

 [HttpGet("{id}")] [ProducesResponseType(typeof(Product), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public IActionResult GetById(int id) { if (!_repository.TryGetProduct(id, out var product)) { return NotFound(); } return Ok(product); } 

在前面的操作中,当基础数据存储区中不存在由id表示的产品时,将返回404状态代码。 调用NotFound helper方法作为return new NotFoundResult();的快捷方式return new NotFoundResult(); 如果产品确实存在,则表示有效负载的Product对象将返回200状态代码。 Ok helper方法被调用为return new OkObjectResult(product);的简写形式return new OkObjectResult(product);

但是在您的情况下,我不会返回任何值,因为状态代码已经包含足够的信息。

[HttpPost]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> ValidateStuff(params)
{
    if ( !await ValidateAsync(params) )
        return ValidationProblem( 
            new ValidationProblemDetails 
            { 
                Detail = "params are invalid" 
            } );

    return NoContent();
}

如果参数有效,您将收到状态码204 ,如果参数无效,您将收到状态码400(带有此json作为响应正文)

{
  "errors": {},
  "type": null,
  "title": "One or more validation errors occurred.",
  "status": 400,
  "detail": "params are invalid",
  "instance": null,
  "extensions": {}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM