對於 MVC
視圖應用而言,Action 返回的結果通常是一個 View
,即頁面;
而對於 Web API
應用程序來說,則返回相應的資源
或者 HTTP 狀態碼
。
Controller
根據約定,繼承自位於 Microsoft.AspNetCore.Mvc
命名空間下的 Controller 類,而這個 Controller 類又繼承自 ControllerBase
抽象類。
如果一個類並不滿足上述約定,那么只要為它添加[Controller]
特性,仍然能夠將它作為 Controller 處理;反之,如果為一個 Controller 添加[NotController]特性。
[Controller]
public class Blogs
{
}
[NonController]
public class ValueController
{
}
Action
每個 Action 都應返回 IActionResult
類型或ActionResult<T>
類型的值作為 HTTP 請求的結果。
常見的類別,包括
- 狀態碼
- 對象的狀態碼
- 重定向
- 內容
狀態碼
返回一個 HTTP 狀態碼給客戶端
對應的狀態碼 | 描述 | ControllerBase中的方法 |
---|---|---|
200 | 操作成功 | Ok() |
400 | 錯誤的請求 | BadRequest() |
204 | 操作成功,但未返回任何內容 | NoContent() |
404 | 請求的資源找不到 | NotFound() |
401 | 未授權 | Unauthorized() |
415 | 無法處理請求附帶的媒體格式 | 無 |
如果要返回上述狀態碼之外的結果,則可以使用 StatusCode
方法,並為該方法指明具體的狀態碼。
return StatusCode(403);
直接使用狀態碼數字有可能會出錯,更簡單且直觀的方法是,使用Microsoft.AspNetCore.Http
命名空間下的 StatusCodes
靜態類
return StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status200OK);
對象的狀態碼
這一類結果繼承自 ObjectResult
,包括 OkObjectResult
、CreatedResult
和 NotFoundObjectResult
等。
public IActionResult DoSomething()
{
var result = new OkObjectResult(new { message = "success", currentDate = DateTime.Now});
return result;
}
重定向
包括 RedirectResult
、LocalRedirectResult
、RedirectToActionResult
和 RedirectToRouteResult
等。
// 重定向到指定的URL
return Redirect("http://www.asp.net/");
// 重定向到當前應用程序中的另一個URL
return LocalRedirect("/account/login");
// 重定向到指定的Action
return RedirectToAction("login");
// 重定向到指定的路由
return RedirectToRoute("default", new { action = "login", controller = "Login" });
內容
包括 ViewResult、PartialViewResult、JsonResult 和 ContentResult 等,其中 ViewResult
和 PartialViewResult
在 MVC 視圖應用中非常常見,用於返回相應的頁面;JsonResult
用於返回JSON 字符串,ContentResult
用於返回一個字符串。