[英]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.