簡體   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