HTTP 狀態碼

ASP.NET Core Web 應用開發–使用 MVC 框架 / PART II MVC 的細節 / 動作方法與 ActionResult / HTTP 狀態碼

動作方法經常根執行結果回應特定的 HTTP 狀態碼,例如找不到資源的404或是未通過身份授權的401等等,ActionResult 子類別 StatusCodeResult 類別支援相關的回應作業。

StatusCodeResult類別底下衍生數個不同的狀態碼類別,在不同的命名空間,列舉如下表:

命名空間:Microsoft.AspNetCore.Mvc

StatusCodeResult子類別狀態碼回應
BadRequestResult 400 Bad Request 不正確的要求
ConflictResult 409 Conflict 請求與目前伺服器產生衝突
NoContentResult 204 No Content 沒有內容
NotFoundResult 404 Not Found 找不到內容
OkResult 200 OK 請求成功
UnauthorizedResult 401 Unauthorized 未授權的回應
UnprocessableEntityResult 422 Unprocessable Entity 無法處理實體
UnsupportedMediaTypeResult 415 Unsupported Media Type 不支援的多媒體格式

命名空間: System.Web.Http

StatusCodeResult子類別狀態碼回應
ConflictResult 409 Conflict 請求與目前伺服器產生衝突
InternalServerErrorResult 500 Internal Server Error 伺服器錯誤

在實務上,可以執行StatusCode方法,並傳入對應的狀態碼數值,即可回傳狀態碼,考慮以下的動作方法配置:

public IActionResult SCRDemo()
{
   return StatusCode(404);           
}

在動作方法SCRDemo中,回傳 StatusCode 方法的執行結果,這會回應一個StatusCodeResult物件,傳入的參數值 404將會要求其回傳NotFoundResult物件,表示一個「404 Not Found」狀態碼。

SCRDemo動作方法配置於Home控制器,於瀏覽器檢視其結果如下:

其中顯示找不到網頁的相關訊息,請特別注意箭頭標示錯誤訊息為狀態碼 404。

狀態碼 404是一個StatusCodeResult 子類別NotFoundResult物件,直接回傳這個物件效果相同,如以下調整後的程式碼:

public IActionResult SCRDemo()
{    
    return new NotFoundResult(); 
}

另外如果直接回傳 NotFound 方法也會得到相同的效果。

return NotFound();

NotFound是ControllerBase 類別的方法,同樣的,其它 StatusCodeResult 子類別無論直接回傳對應的狀態碼物件,或是ControllerBase 類別方法原理相同。

而對於沒有對應類別的狀態碼,可以在直接將狀態碼編號當作參數傳入StatusCode即可。

沒有留言: