首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET MVC 基礎入門:架構、約定、路由與請求流程

     編輯:ASP.NET 基礎

什麼是 MVC?

MVC (Model-View-Controller) 是一種**軟件架構模式**,將應用劃分為三大核心組件:

  • Model (模型):業務數據、邏輯規則、持久化映射 (Entity Framework 實體、ViewModel、Service/Repository)。
  • View (視圖):用戶界面渲染 (Razor .cshtml、HTML、CSS、JS)、**僅負責顯示**,不含業務邏輯。
  • Controller (控制器):處理 HTTP 請求、協調 Model 與 View、選擇 ActionResult 響應類型。

MVC 不是 ASP.NET 專有

Java (Spring MVC, Struts2)、Python (Django, Flask)、PHP (Laravel)、Go (Gin)、Node (Express) 均實現 MVC 模式。ASP.NET MVC 是微軟在 .NET 平台上的實現,**開源** (GitHub: aspnet/AspNetCore),從 2008 年 1.0 版本發展至今 (ASP.NET Core 8.0+)。

三大組件交互規則

Controller → 操作 Model → 選擇 View → 渲染響應
    ↑                                    ↓
    └──────── 用戶交互 (表單提交/鏈接點擊) ────────┘
  • Controller **可直接** 調用 Model 和 View。
  • View **可讀取** Model 數據 (通過 `@Model`)。
  • **Model 不依賴** View 和 Controller (核心解耦點)。
  • View **不應直接** 調用 Controller (僅通過表單提交/超鏈接發起新請求)。

ASP.NET WebForms vs ASP.NET MVC

特性WebFormsMVC
編程模型事件驅動 (Page_Load, Button_Click)請求-響應 (Action 執行)
URL 映射基於物理文件 (.aspx)基於路由規則 (/Controller/Action/id)
狀態管理ViewState (隱藏字段,體積大)無狀態 (RESTful 友好)
HTML 控制服務端控件生成 (難控制)完全掌控 HTML (前端友好)
測試性難單元測試 (依賴 HttpContext)易測試 (Controller 純類,可 Mock)
關注點分離代碼隱藏 .aspx.cs 混合邏輯Model/View/Controller 物理分離

兩者**共享 ASP.NET 運行時** (Pipeline, Module, Handler, Session, Cache 等),可在同一應用中混合使用 (舊模塊 WebForms、新模塊 MVC)。

ASP.NET MVC 約定大於配置

約定規則目的
控制器位置/Controllers 資料夾統一管理
控制器命名類名以 Controller 結尾 (如 HomeController)路由默認查找
視圖位置/Views/{ControllerName}/{ActionName}.cshtml自動查找視圖
共享視圖/Views/Shared/Layout、Partial 跨控制器復用
模型位置/Models/ 或獨立類庫業務邏輯集中
基類Controller 繼承 System.Web.Mvc.Controller提供輔助方法 (View, Json, Redirect...)

路由系統:URL 到 Action 的映射

默認路由 (RouteConfig.cs)


URL 解析示例

請求 URL匹配 Controller匹配 Action參數 id說明
/HomeIndexnull全匹配默認值
/HomeHomeIndexnullAction 使用默認
/Home/AboutHomeAboutnull標準匹配
/Product/Detail/123ProductDetail123 (string)id 映射到 Action 參數
/Product/Detail/123?name=abcProductDetail123查詢字符串自動綁定到其他參數

參數綁定規則

Action 參數名 **不區分大小寫** 匹配:

  • 路由參數 (`{id}`)
  • 查詢字符串 (`?id=123`)
  • 表單字段 (``)

視圖中的 Model 與類型聲明

Razor 視圖 (.cshtml)


ASPX 視圖 (.aspx) - 老版本

<%@ Import Namespace="MyProject.Models" %>

<%= Model.Name %>

請求處理流程圖解

1. 用戶輸入 URL → 瀏覽器發送 HTTP Request
2. IIS/ASP.NET Core Middleware Pipeline
3. UrlRoutingModule 攔截 → 匹配 RouteCollection
4. MvcRouteHandler → MvcHandler
5. ControllerFactory 創建 Controller 實例
6. ActionInvoker 
   ├─ 選擇 Action 方法 (ActionNameSelector, ActionMethodSelector)
   ├─ 模型綁定 (DefaultModelBinder) → Action 參數
   ├─ 執行過濾器 (Authorization → Action → Result → Exception)
   └─ 執行 Action 返回 ActionResult
7. ActionResult 執行結果
   ├─ ViewResult → ViewEngine 查找 .cshtml → RazorView 渲染 → HTML
   ├─ JsonResult → JsonSerializer 序列化 → JSON
   ├─ RedirectResult → 302 Location Header
   └─ FileResult → 二進制流 + Content-Disposition
8. HTTP Response 返回瀏覽器

新手常見誤區

誤區正確理解
以為必須用 Entity FrameworkModel 可以是任何類:ADO.NET、Dapper、Web API 調用、內存對象
在 View 中寫業務邏輯/數據庫查詢View 僅渲染,所有邏輯在 Controller/Service
Controller 過於臃腫 (Fat Controller)引入 Service Layer,Controller 僅負責 HTTP 協議轉換
忽略 ModelState.IsValid服務端驗證是安全底線,必須檢查
以為路由只能有一條可註冊多條路由,按順序匹配,支援屬性路由 [Route("api/users/{id}")]

學習路線建議

  1. 核心:Controller/Action/路由/模型綁定/ActionResult/視圖/Razor 語法/HtmlHelper/驗證/過濾器。
  2. 進階:領域模型/Service層/Repository/依賴注入/單元測試/Areas/屬性路由/Web API/身份認證/授權/SignalR。
  3. 現代化:遷移至 **ASP.NET Core** (跨平台、高性能、統一 MVC/Web API、中間件管道、內置 DI、Razor Pages/Blazor 選項)。

總結

ASP.NET MVC 以**約定大於配置**降低認知負荷,通過**路由系統**實現 RESTful URL,通過**模型綁定**自動映射請求數據,通過**ActionResult 多態**支撐多樣化響應。理解其請求流程、組件職責邊界、約定規則,是掌握該框架的基石。新項目請直接拥抱 ASP.NET Core,享受現代 .NET 生態紅利。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved