ASP.NET Core 中文文檔 第四章 MVC(4.1)Controllers, Actions 和 Action Results


原文:Controllers, Actions, and Action Results
作者:Steve Smith
翻譯:姚阿勇(Dr.Yao)
校對:許登洋(Seay)

Action 和 action result 是開發者使用 ASP.NET MVC 構建應用程序的基礎部分。

什么是 Controller

在 ASP.NET MVC 中, 控制器( Controller
 )用於定義和聚合操作(Action)的一個集合。操作( 或操作方法 )是控制器中處理入站請求的一個方法。控制器提供了一種邏輯方式將相似的操作組織起來,允許一些通用的規則(如:路由,緩存和驗證)得到共同的應用。 入站請求通過路由(routing)被映射到操作上。

在 ASP.NET Core MVC 中,控制器可以是任何以 “Controller” 結尾或者繼承自以 “Controller” 結尾的可實例化類。控制器應當遵循 顯式依賴原則 並且通過使用依賴注入在構造函數中獲取他們需要的任何依賴項。

按照慣例,控制器類:

  • 放在根目錄下的 “Controllers” 文件夾中
  • 繼承自 Microsoft.AspNetCore.Mvc.Controller

這兩個慣例不是強制要求。

在模型-視圖-控制器模式中,控制器負責初始化請求以及實例化模型。通常來說,業務流程應當放在模型中執行。

說明
模型應該是一個簡單的傳統 CLR 對象(Plain Old CLR Object (POCO) ),而不是一個數據庫上下文 DbContext 或者關系數據庫類型。

控制器取得模型的執行結果(如果有),返回正確的視圖以及相關的視圖數據。更多請參考:Overview of ASP.NET Core MVC 和 ASP.NET Core MVC 和 Visual Studio 入門

技巧
控制器是一個 UI級別 的抽象。它的責任在於確保入站請求的數據是有效的,然后選擇應當返回哪一個視圖(或者 API 的結果)。在有着良好分解的應用程序中,控制器不會直接包含數據訪問或業務邏輯,而是委托給服務去處理這些任務。

Action 的定義

控制器上的任意公共方法都是一個 Action 。Action 上的參數是通過 模型綁定 來請求數據綁定並校驗。

提示
帶有參數的 Action 方法應該檢查 ModelState.IsValid 屬性的值是否為真 。

Action 方法應當包含將傳入請求映射到業務的邏輯。業務關注通常應該表現為由控制器通過( 依賴注入(dependency injection))訪問服務。Actions 然后映射業務行為的結果到應用程序的狀態。

Action 可以返回任何東西,但是常常會返回一個 IActionResult (或異步方法返回的 Task<IActionResult> )實例生成響應。Action 方法負責選擇“響應的類型”,Action Result 負責“響應的執行”。

控制器輔助方法

  • 視圖(View)
    返回一個使用模型渲染 HTML 的視圖。例: return View(customer);
  • HTTP 狀態代碼
    返回一個 HTTP 狀態代碼。例: return BadRequest();
  • 格式化的響應
    返回 Json 或類似以特定方式格式化的對象。例: return Json(customer);
  • 內容協商的響應
    除了直接返回一個對象,Action 還可以返回一個內容協商的響應(使用 OkCreated,CreatedAtRoute 或 CreatedAtAction )。例如:return Ok();  或 return CreatedAtRoute("routename",values,newobject");
  • 重定向
    返回一個指向其他 Action 或目標的重定向(使用 Redirect,LocalRedirect,RedirectToAction 或 RedirectToRoute )。例如: return RedirectToAction("Complete", new {id = 123});

除了上面的方法之外,Action 還可以直接返回一個對象。在這種情況下,對象將以客戶端要求的方式進行格式化。詳情請參考: 格式化響應數據

橫切關注點

在大多數應用中,許多 Action 會共用部分工作流。例如,大多數應用可能只對驗證過的用戶開放,或者要利用緩存。當你想要在 Action 方法運行之前或之后執行一些邏輯業務時,可以使用 過濾器(filter) 。利用 過濾器(filters) 處理一些橫切關注點,可以防止你的 Action 變得過於臃腫。這有助於剔除 Action 中的重復代碼,使得它們可以遵循 不要重復你自己(DRY)原則 。

就驗證和授權而言,你可以將 Authorize 特性應用在任何一個要求授權的 Action 上。將它加在控制器上將會對該控制器里的所有的 Action 采用授權。這個特性的添加將確保每個訪問此 Action 的請求都被應用了對應的過濾器。有些特性可以同時應用在控制器和 Action 上,以提供對過濾器行為更小粒度的控制。

關於 MVC 應用程序中橫切關注點的其他例子:

提示
在 MVC 應用程序里,很多橫切關注點都可以利用過濾器來處理。還有另一種對所有 ASP.NET Core 應用程序都有效的選擇需要記住,就是自定義 中間件(middleware)

返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM