在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; }