天天看點

詳解 ASP.NET Core MVC之子產品化設計

作者:小乖獸技術
詳解 ASP.NET Core MVC之子產品化設計

ASP.NET Core MVC 是 ASP.NET Core 架構中的一部分,它提供了基于模型-視圖-控制器(MVC)模式的 Web 應用程式開發功能。在 ASP.NET Core MVC 中,子產品化設計和松耦合的思想被充分運用,使得應用程式易于擴充和維護。

ASP.NET Core MVC 架構由以下幾個主要子產品組成:

1. 控制器

控制器是 MVC 模式中的核心部分,它負責接收來自用戶端的請求,并調用相應的操作方法來處理請求。在 ASP.NET Core MVC 架構中,控制器需要繼承 ControllerBase 類,并且會通過依賴注入(DI)系統來執行個體化。

2. 操作方法

操作方法是控制器中用于處理請求的方法,它們被定義為公共方法,傳回類型通常是 IActionResult 或 ActionResult。操作方法可以設定傳入參數,也可以設定路由屬性來比對特定的請求。在 ASP.NET Core MVC 中,操作方法通常都使用特性路由(Attribute Routing)或約定路由(Conventional Routing)來比對請求。

3. 模型綁定

模型綁定是 ASP.NET Core MVC 中一種重要的資料綁定機制,它可以自動将 HTTP 請求中的資料轉換為 C# 對象。ASP.NET Core MVC 通過 Model Binding 系統來實作模型綁定。Model Binding 系統會根據請求中的參數名稱、路由資料等資訊,找到對應的 C# 對象,然後将請求中的資料綁定到該對象中。

4. 中間件

在 ASP.NET Core 中,中間件是處理請求和響應的核心部分。在 ASP.NET Core MVC 中,中間件可以被用于添加認證、授權、緩存、錯誤處理等功能。ASP.NET Core MVC 定義了一系列内置的中間件,如 UseRouting、UseEndpoints、UseMvc 等,同時也支援自定義中間件的開發。

5. 視圖引擎

視圖引擎是 ASP.NET Core MVC 中用于生成 HTML 輸出的部分,它可以将模型資料(Model)、視圖頁面(View)和控制器操作方法(Controller Action)組合在一起,生成最終輸出的 HTML 代碼。在 ASP.NET Core MVC 中,支援多種視圖引擎,如 Razor 視圖引擎、Web Forms 視圖引擎等。

6. 過濾器

過濾器是 ASP.NET Core MVC 中用于實作橫切關注點(Cross-Cutting Concerns)的一種方式,它可以在控制器執行前、執行後、視圖渲染前、渲染後等多個執行時間點進行操作。ASP.NET Core MVC 中支援多種類型的過濾器,如授權過濾器、異常過濾器、日志過濾器等。

總體上,ASP.NET Core MVC 架構采用了松散耦合和子產品化設計的思想,充分利用了 .NET Core 中的依賴注入機制和中間件系統。該架構提供了豐富的實作方式來支援 Web 應用程式的開發,同時也為使用者提供了高度可擴充性和靈活性。

詳解 ASP.NET Core MVC之子產品化設計

以下是一個 ASP.NET Core MVC 示例,展示了如何實作一個簡單的清單頁面:

  1. 建立 ASP.NET Core MVC 項目

使用 Visual Studio 或者指令行工具建立一個新的 ASP.NET Core MVC 項目。在 Visual Studio 中,可以選擇建立一個空白的 ASP.NET Core Web 應用程式,然後選擇“MVC”模闆。

  1. 添加控制器和視圖

在 ASP.NET Core MVC 中,控制器是處理請求并生成響應的核心元件。我們可以建立一個 Home 控制器,在其中添加一個 Index 動作方法,用于傳回一個電影清單頁面。

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;

namespace MovieList.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            var movies = new List<string>
            {
                "The Movie1",
                "The Movie2",
                "The Movie3",
                "The Movie4",
                "The Movie5",
            };

            return View(movies);
        }
    }
}
           

在上述代碼中,HomeController 類繼承自 ControllerBase 類,Index() 方法用于傳回一個包含電影清單的視圖頁面。該視圖頁面采用 Razor 視圖引擎,可以通過 View() 方法指定視圖名稱和模型對象。

接下來,我們需要建立上述 Index() 方法對應的視圖頁面,該視圖頁面應該位于 ~/Views/Home/Index.cshtml 檔案中。以下是 Index.cshtml 檔案的示例代碼:

@model List<string>

<h1>Movie List</h1>

<ul>
    @foreach (var movie in Model)
    {
        <li>@movie</li>
    }
</ul>
           

在上述代碼中,使用了 Razor 視圖引擎的模型綁定功能,将 HomeController.Index() 方法中傳遞的清單資料綁定到了視圖的 Model 對象中,并在視圖中通過 foreach 循環來展示清單。

  1. 啟動應用程式并通路頁面

現在我們可以運作 ASP.NET Core MVC 應用程式,并在浏覽器中通路 ~/Home/Index 頁面。在通路頁面時,HomeController.Index() 方法會被調用,生成包含電影清單的視圖頁面并發送給浏覽器展示。

以上就是一個簡單 ASP.NET Core MVC 示例的實作過程,通過控制器、視圖和模型綁定等功能,我們可以快速建構出複雜的 Web 應用程式。

官方文檔:https://learn.microsoft.com/en-us/aspnet/core/mvc/overview?view=aspnetcore-7.0