解釋 ASP.NET Core 中 Razor Pages 的工作原理
Razor Pages 透過採用基於檔案的路由簡化了傳統的基於 MVC 的程式設計模型。Razor Pages 側重於基於頁面的場景來構建 Web 應用程式,而不是像傳統的 ASP.NET MVC 應用程式那樣使用控制器和檢視。
一旦應用程式收到 HTTP 請求,它就會透過中介軟體管道移動,直到到達可以處理和處理它的中介軟體元件。通常,它是一個路由中介軟體,它將 URL 路徑與配置的路由匹配。此路由定義為此特定請求呼叫哪個 Razor 頁面。
一旦路由器選擇了 Razor 頁面,框架就會執行該 Razor 頁面以生成最終的 HTML 響應。然後,此響應會返回到發出請求的客戶端瀏覽器。
Razor Pages 檔案是 Pages 資料夾中的 .cshtml 檔案,類似於 ASP.NET MVC 應用程式中的 View 檔案。每個檢視都有一個關聯的 C# 物件。此物件稱為頁面模型,它模擬頁面的行為。通常,路由器透過在 Pages 資料夾中查詢具有相同路徑的 Razor 頁面來將請求 URL 對映到單個 Razor 頁面。
示例
@page @model IndexModel @{ ViewData["Title"] = "Home page"; } <div class="text-center"> <h1 class="display-4">Welcome</h1> <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p> </div>
在上面的程式碼片段中,@page 指令指示該頁面是 Razor 頁面。第二行將 Razor 頁面連結到 PageModel,IndexModel。接下來,在 @ 塊內,我們有 C# 程式碼在不向響應寫入任何 HTML 的情況下執行。我們還可以使用動態 C# 程式碼來呈現 HTML 和 Razor 頁面內的普通靜態 HTML。
Razor Pages 具有佈局,它是定義應用程式通用元素(如頁首和頁尾)的基本模板。此佈局 HTML 會新增到 Razor 頁面 HTML 中以生成完整的 HTML 響應,從而避免重複程式碼。
PageModel 類是 Razor 頁面的“程式碼隱藏”,它執行實際的繁重工作,例如:處理業務邏輯、發出外部請求、從資料庫獲取資料等。所有 Page Model 類都派生自 PageModel 基類。它們還提供一個或多個頁面處理程式,這些處理程式只是定義如何處理對 Razor 頁面的請求的方法。
例如,以下是上面 Razor 頁面的 PageModel。
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace Razor.Pages{ public class IndexModel : PageModel{ private readonly ILogger<IndexModel> _logger; public IndexModel(ILogger<IndexModel> logger){ _logger = logger; } public void OnGet(){ } } }
這些頁面處理程式使用基於約定的命名,即頁面處理程式的名稱基於它們響應的 HTTP 動詞。根據應用程式邏輯,處理程式可以返回 void,這告訴 Razor 頁面返回 HTML 檢視或以 IActionResult 形式返回其他資料。
Razor Pages 實現的重要一點是,它們將檢視生成邏輯與實際資料計算或業務邏輯分離。這遵循關注點分離原則,並使應用程式保持可維護性。如果需要更改 UI,則可以在不修改業務邏輯的情況下執行此操作,反之亦然。