2024-10-22 012_學寫API_HTTP 響應

2024-10-22 012_學寫API_HTTP 響應

在 ASP.NET Core 中,控制器類(通常繼承自 ControllerBaseController)提供了許多輔助方法來生成各種 HTTP 響應。這些響應方法幫助開發者更方便地處理客戶端請求並返回合適的 HTTP 狀態碼和數據。以下是 ASP.NET Core 中常用的響應方法:

1. 成功響應方法

這些方法用於表示請求成功,返回相應的數據或狀態。

  • **Ok()**:

    • 返回狀態碼 200 OK,表示請求成功。
    • 用法
      1
      2
      return Ok(); // 返回 200 OK
      return Ok(data); // 返回 200 OK 並附帶 data 作為響應體
  • **Created()**:

    • 返回狀態碼 201 Created,表示創建資源成功。
    • 需要提供資源的 URI 和新創建的對象。
    • 用法
      1
      return Created("/api/packages/123", newPackage);
  • **CreatedAtAction()**:

    • 返回狀態碼 201 Created,並指定創建的資源的 URI,這個 URI 由控制器中的某個操作生成。
    • 用法
      1
      return CreatedAtAction(nameof(GetPackageById), new { id = newPackage.Id }, newPackage);
  • **CreatedAtRoute()**:

    • 返回狀態碼 201 Created,並基於指定的路由創建資源的 URI。
    • 用法
      1
      return CreatedAtRoute("GetPackageRoute", new { id = newPackage.Id }, newPackage);
  • **NoContent()**:

    • 返回狀態碼 204 No Content,表示請求成功,但沒有內容需要返回,通常用於 PUTDELETE 請求。
    • 用法
      1
      return NoContent();

2. 重定向響應方法

這些方法用於將請求重定向到其他 URL。

  • **Redirect()**:

    • 返回狀態碼 302 Found,並重定向到指定的 URL。
    • 用法
      1
      return Redirect("https://example.com");
  • **RedirectPermanent()**:

    • 返回狀態碼 301 Moved Permanently,並永久重定向到指定的 URL。
    • 用法
      1
      return RedirectPermanent("https://example.com");
  • **RedirectToAction()**:

    • 重定向到控制器中的指定操作。
    • 用法
      1
      return RedirectToAction("ActionName", "ControllerName");
  • **RedirectToRoute()**:

    • 重定向到指定的路由。
    • 用法
      1
      return RedirectToRoute("RouteName");

3. 客戶端錯誤響應方法

這些方法用於表示客戶端的請求不正確。

  • **BadRequest()**:

    • 返回狀態碼 400 Bad Request,表示客戶端的請求有誤。
    • 用法
      1
      2
      return BadRequest(); // 返回 400
      return BadRequest("請求格式錯誤"); // 返回 400 並附帶錯誤消息
  • **Unauthorized()**:

    • 返回狀態碼 401 Unauthorized,表示請求需要授權,但客戶端未提供有效憑證。
    • 用法
      1
      return Unauthorized();
  • **Forbidden()**:

    • 返回狀態碼 403 Forbidden,表示客戶端已經認證,但沒有訪問資源的權限。
    • 用法
      1
      return Forbid();
  • **NotFound()**:

    • 返回狀態碼 404 Not Found,表示找不到請求的資源。
    • 用法
      1
      2
      return NotFound();
      return NotFound("找不到這個包裹");

4. 服務端錯誤響應方法

這些方法用於表示服務端發生錯誤。

  • **StatusCode()**:

    • 返回指定的 HTTP 狀態碼,這可以用來返回一些自定義的狀態碼。
    • 用法
      1
      return StatusCode(500, "服務器內部錯誤");
  • **Problem()**:

    • 返回一個標準化的錯誤響應,通常用於表示服務器錯誤,並可選擇提供詳細錯誤信息。
    • 用法
      1
      return Problem("服務器遇到問題,請稍後重試");

5. JSON 和文件響應方法

  • **Json()**:

    • 返回 JSON 格式的數據。
    • 用法
      1
      return Json(new { name = "Alice", age = 25 });
  • **File()**:

    • 返回文件作為響應。
    • 用法
      1
      return File(fileBytes, "application/pdf", "document.pdf");

6. 其他響應方法

  • **Content()**:

    • 返回一個包含文本的 HTTP 響應,通常用於返回簡單的文本或 HTML。
    • 用法
      1
      return Content("這是一個簡單的響應內容");
  • **PhysicalFile()**:

    • 返回一個物理文件作為響應。
    • 用法
      1
      return PhysicalFile(@"C:\files\document.pdf", "application/pdf");
  • **LocalRedirect()**:

    • 返回一個本地重定向。
    • 用法
      1
      return LocalRedirect("/home/index");

小結

ASP.NET Core 提供了豐富的響應方法來生成各種 HTTP 響應,這些方法可以使開發者更加方便地構建 API,處理不同的客戶端請求情況,並返回合適的狀態碼和數據。

  • 成功響應(如 Ok()Created()NoContent())通常用於表示操作成功。
  • 錯誤響應(如 BadRequest()NotFound()Unauthorized())用於告知客戶端請求有問題。
  • 重定向響應(如 Redirect()RedirectToAction())用於將請求重定向到其他資源。

如果您有其他想了解的響應方法或對某些方法有疑問,隨時告訴我!