1. 程式人生 > 其它 >關於ASP.NET Core Web Api返回狀態碼的有關內容。

關於ASP.NET Core Web Api返回狀態碼的有關內容。

在IT技術的日益發展的大背景下,越來越多公司使用了前後端分離的模式,那麼後端人員將返回的不在是View檢視,更多的將是一些狀態碼和資料,為此特意記錄下常用的狀態碼以及方法。

本文章:部分內容轉載於https://www.cnblogs.com/sky-net/p/9284696.html

下面羅列出所有的狀態碼,在何時情況下使用。

namespace System.Net
{
  /// <summary>Contains the values of status codes defined for HTTP.</summary>
  public enum HttpStatusCode
  {
    Continue 
= 100, // 0x00000064 (繼續) 請求者應當繼續提出請求。 伺服器返回此程式碼表示已收到請求的第一部分,正在等待其餘部分。 SwitchingProtocols = 101, // 0x00000065 (切換協議) 請求者已要求伺服器切換協議,伺服器已確認並準備切換。 Processing = 102, // 0x00000066 (處理中) EarlyHints = 103, // 0x00000067 (預提示) // 2xx (成功)表示成功處理了請求的狀態程式碼。
OK = 200, // 0x000000C8 (成功) 伺服器已成功處理了請求。 通常,這表示伺服器提供了請求的網頁。 Created = 201, // 0x000000C9 (已建立) 請求成功並且伺服器建立了新的資源。 Accepted = 202, // 0x000000CA (已接受) 伺服器已接受請求,但尚未處理。 NonAuthoritativeInformation = 203, // 0x000000CB (非授權資訊) 伺服器已成功處理了請求,但返回的資訊可能來自另一來源。 NoContent = 204
, // 0x000000CC (無內容) 伺服器成功處理了請求,但沒有返回任何內容。 ResetContent = 205, // 0x000000CD (重置內容) 伺服器成功處理了請求,但沒有返回任何內容。 PartialContent = 206, // 0x000000CE (部分內容) 伺服器成功處理了部分 GET 請求。 MultiStatus = 207, // 0x000000CF AlreadyReported = 208, // 0x000000D0 IMUsed = 226, // 0x000000E2 // 3xx (重定向)表示要完成請求,需要進一步操作。 通常,這些狀態程式碼用來重定向。 Ambiguous = 300, // 0x0000012C MultipleChoices = 300, // 0x0000012C (多種選擇)針對請求,伺服器可執行多種操作。 伺服器可根據請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇。 Moved = 301, // 0x0000012D (永久移動) 請求的網頁已永久移動到新位置。 伺服器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。 MovedPermanently = 301, // 0x0000012D (臨時移動) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。 Found = 302, // 0x0000012E (已找到) Redirect = 302, // 0x0000012E (重定向) RedirectMethod = 303, // 0x0000012F (重定向到方法) SeeOther = 303, // 0x0000012F (檢視其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,伺服器返回此程式碼。 NotModified = 304, // 0x00000130 (未修改) 自從上次請求後,請求的網頁未修改過。 伺服器返回此響應時,不會返回網頁內容。 UseProxy = 305, // 0x00000131 (使用代理) 請求者只能使用代理訪問請求的網頁。 如果伺服器返回此響應,還表示請求者應使用代理。 Unused = 306, // 0x00000132 (未使用) RedirectKeepVerb = 307, // 0x00000133 (保持動作的重定向) TemporaryRedirect = 307, // 0x00000133 (臨時重定向) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。 PermanentRedirect = 308, // 0x00000134 (永久性重定向) // 4xx(請求錯誤)這些狀態程式碼表示請求可能出錯,妨礙了伺服器的處理。 BadRequest = 400, // 0x00000190 (錯誤請求) 伺服器不理解請求的語法。 Unauthorized = 401, // 0x00000191 (未授權) 請求要求身份驗證。 對於需要登入的網頁,伺服器可能返回此響應。 PaymentRequired = 402, // 0x00000192 (支付請求) Forbidden = 403, // 0x00000193 (禁止) 伺服器拒絕請求。 NotFound = 404, // 0x00000194 (未找到) 伺服器找不到請求的網頁。 MethodNotAllowed = 405, // 0x00000195 (方法禁用) 禁用請求中指定的方法。 NotAcceptable = 406, // 0x00000196 (不接受) 無法使用請求的內容特性響應請求的網頁。 ProxyAuthenticationRequired = 407, // 0x00000197 (需要代理授權) 此狀態程式碼與 401(未授權)類似,但指定請求者應當授權使用代理。 RequestTimeout = 408, // 0x00000198 (請求超時) 伺服器等候請求時發生超時。 Conflict = 409, // 0x00000199 (衝突) 伺服器在完成請求時發生衝突。 伺服器必須在響應中包含有關衝突的資訊。 Gone = 410, // 0x0000019A (已刪除) 如果請求的資源已永久刪除,伺服器就會返回此響應。 LengthRequired = 411, // 0x0000019B (需要有效長度) 伺服器不接受不含有效內容長度標頭欄位的請求。 PreconditionFailed = 412, // 0x0000019C (未滿足前提條件) 伺服器未滿足請求者在請求中設定的其中一個前提條件。 RequestEntityTooLarge = 413, // 0x0000019D (請求實體過大) 伺服器無法處理請求,因為請求實體過大,超出伺服器的處理能力。 RequestUriTooLong = 414, // 0x0000019E (請求的 URI 過長) 請求的 URI(通常為網址)過長,伺服器無法處理。 UnsupportedMediaType = 415, // 0x0000019F (不支援的媒體型別) 請求的格式不受請求頁面的支援。 RequestedRangeNotSatisfiable = 416, // 0x000001A0(請求範圍不符合要求) 如果頁面無法提供請求的範圍,則伺服器會返回此狀態程式碼。 ExpectationFailed = 417, // 0x000001A1 (未滿足期望值) 伺服器未滿足”期望”請求標頭欄位的要求。 MisdirectedRequest = 421, // 0x000001A5 (方向錯誤的請求) UnprocessableEntity = 422, // 0x000001A6 (不可獲得的實體) Locked = 423, // 0x000001A7 (被鎖定) FailedDependency = 424, // 0x000001A8 (依賴注入失敗) UpgradeRequired = 426, // 0x000001AA (需要升級) PreconditionRequired = 428, // 0x000001AC (必須滿足的先決條件) TooManyRequests = 429, // 0x000001AD (過多的請求) RequestHeaderFieldsTooLarge = 431, // 0x000001AF (請求頭欄位太大) UnavailableForLegalReasons = 451, // 0x000001C3 (由於法律原因不可用) // 5xx(伺服器錯誤)這些狀態程式碼表示伺服器在嘗試處理請求時發生內部錯誤。 這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。 InternalServerError = 500, // 0x000001F4 (伺服器內部錯誤) 伺服器遇到錯誤,無法完成請求。 NotImplemented = 501, // 0x000001F5 (尚未實施) 伺服器不具備完成請求的功能。 例如,伺服器無法識別請求方法時可能會返回此程式碼。 BadGateway = 502, // 0x000001F6 (錯誤閘道器) 伺服器作為閘道器或代理,從上游伺服器收到無效響應。 ServiceUnavailable = 503, // 0x000001F7 (服務不可用) 伺服器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。 GatewayTimeout = 504, // 0x000001F8 (閘道器超時) 伺服器作為閘道器或代理,但是沒有及時從上游伺服器收到請求。 HttpVersionNotSupported = 505, // 0x000001F9 (HTTP 版本不受支援) 伺服器不支援請求中所用的 HTTP 協議版本。 VariantAlsoNegotiates = 506, // 0x000001FA InsufficientStorage = 507, // 0x000001FB (儲存不足) LoopDetected = 508, // 0x000001FC (迴圈檢測) NotExtended = 510, // 0x000001FE (無法擴充套件) NetworkAuthenticationRequired = 511, //0x000001FF(必須的網路授權) } }

在繼承ControllerBase類的控制器中,對於常用的狀態碼結果都提供了一個相應的方法進行直接返回相應的物件。要在Action中返回上述的狀態碼,只需要呼叫對於的方法即可。

如果想要返回狀態碼之外的結果,可以直接呼叫StatusCode方法,並指明具體的狀態碼,如下:

return StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError, "伺服器遇到錯誤,無法完成請求");

如果返回的結果是包含物件的狀態碼,這一類的結果繼承自ObjectResult,包含了OkObjectResult、CreatedResult、NotFountObjectResult等,如下:

        //例子一
     public
IActionResult text() { return Ok(new { messahe = "操作成功", value = DateTime.Now }); }
     //例子二 
public IActionResult text() { var result = new OkObjectResult(new { messahe = "操作成功", value = DateTime.Now }); return result; }

如果返回的結果是重定向結果,包括RedirectResult、LocalRedirectResult、RedirectToActionResult、RedirectToRouteResult等,使用方法如下:

 //重定向到指定URL
 return Redirect("http://www.micresoft.com/");

 //重定向到當前應用程式的另一個URL
 return LocalRedirect("account/login");

 //重定向到指定的Action
 return RedirectToAction("login");

 //重定向到指定的路由
 return RedirectToRoute("default",new { action ="login",controller = "account"});

如果要返回的是內容結果,包括ViewResult、JsonResult等,使用方法如下:

return Json(new {message = "test",date = DateTime.Now});
return Content("測試狀態碼");

除了返回IActionResult外,當在Action要返回資料時,還可以使用ActionResult<T>類,ActionResult<T>是ASP.NET Core 2.1版本新增的,優點就是可以靈活的為action設定返回值以及指定API返回的資料型別,如下:

public ActionResult<User> Test(int Id)
{
    User user = GetUserById(Id);
    return user;
}