[ASP.NET WebAPI] #6 HTTP狀態碼介紹:200=OK、400=BadRequest、401=Unauthorized

HTTP 狀態碼分成 5 個類別,都是三位數的編號。

  • 1XX (Informational) – 請求已被接收,繼續處理中
  • 2XX (Successful) – 請求已成功被接收、理解、並接受
  • 3XX (Redirection) – 請求需要進一步操作才能完成
  • 4XX (Client Error) – 請求包含語法錯誤或無法完成
  • 5XX (Server Error) – 伺服器無法完成請求(請求本身沒有問題)

這篇文章主要介紹 200 (OK)、400 (Bad Request) 和 401 (Unauthorized)。

1. 200 OK

  • 這是最常見的成功狀態碼,
return Ok(result);  // 回傳 200 OK

2. 400 Bad Request

  • 最常見的失敗狀態碼,會發生在用戶端傳送了不正確或無效的資料時,應回傳 400 狀態碼。
return BadRequest("Invalid data.");  // 回傳 400 Bad Request

3. 401 Unauthorized

  • 表示用戶端請求未經授權,或者說身份驗證失敗的情況。
return Unauthorized();  // 回傳 401 Unauthorized

範例

/// 5. 修改個人資料 
/// <include file='Docs/AccountControllerAPIDOCS.xml' path='doc/members/member[@name="UpdUserData"]/*'/>
[HttpPost("UpdUserData")]
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public ActionResult UpdUserData([FromBody] ReqUpdUserData ReqUpdUserData)
{

    List<ResData> ErrRes;
    string ErrMsg = "";

    // 檢查使用者有無登入
    if (_jwtAuthFilter.AuthChecking(Request.Headers.Authorization))
    {
        //.
        //.
        //.
        //.
        // 檢查輸入
        if (ErrMsg == "")
        {
            // ......
            // 修改使用者資料表
            _dbcontext.Database.ExecuteSqlRaw("EXEC usp_Upd_UUser2 @UID, @UName, @UGender, @UBirthday, @UNationID, @UPhone_Code, @UPhone");

            List<ResData> Res;
            Res = new List<ResData>
            {
                new ResData {State="OK",Msg="個人資料修改成功~"}
            };
            return Ok(Res);
        }
        else
        {
            ErrRes = new List<ResData>
            {
                new ResData {State="Err",Msg=ErrMsg}
            };
            return BadRequest(ErrRes);
        }

    }
    else
    {
        ErrRes = new List<ResData>{
             new ResData {State="Err",Msg="請重新登入!"}
             };
        return Unauthorized(ErrRes);
    }
}

aspnetwebapi-6-1

  1. 此段程式碼從外部 XML 檔案中提取文件說明。
  2. 用來指定 API 端點可能回傳的 HTTP 狀態碼。
  3. 回傳 HTTP 狀態碼。