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

ASP.NET MVC Controller 激活系統總體設計:IController、ControllerBase、ControllerContext 核心架構

     編輯:關於ASP.NET

Controller 激活系統是 MVC 請求處理的起點。本文梳理核心介面與類別架構:IController/IAsyncController、ControllerBase、ControllerContext、Controller 類別繼承體系,為理解激活流程奠基。

一、IController 與 IAsyncController

public interface IController
{
    void Execute(RequestContext requestContext);
}

public interface IAsyncController : IController
{
    IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state);
    void EndExecute(IAsyncResult asyncResult);
}

同步/異步雙介面支援,MVC 運行時自動偵測實作介面選擇執行方式。

二、ControllerBase 核心屬性

public abstract class ControllerBase : IController
{
    public ControllerContext ControllerContext { get; set; }
    public TempDataDictionary TempData { get; set; }
    public object ViewBag { get; }        // 動態物件,包裝 ViewData
    public ViewDataDictionary ViewData { get; set; } // 字典式資料傳遞
}

TempData:跨請求暫存(預設 Session 儲存),Keep() 可保留。ViewBag 為 ViewData 動態包裝,屬性存取轉為字典鍵值操作。

三、ControllerContext 封裝設計

public class ControllerContext
{
    public ControllerBase Controller { get; set; }
    public RequestContext RequestContext { get; set; }
    public HttpContextBase HttpContext { get; set; }
    public RouteData RouteData { get; set; }
    // 建構子支援 (RequestContext, Controller) 或 (HttpContext, RouteData, Controller)
}

封裝 Controller 與 RequestContext(含 HttpContext + RouteData),所有屬性可讀寫,便於測試與攔截修改。

四、Controller 類別完整繼承體系

public abstract class Controller :
    ControllerBase,
    IController,
    IAsyncController,
    IActionFilter,
    IAuthorizationFilter,
    IExceptionFilter,
    IResultFilter,
    IDisposable
{
    // 大量輔助方法:View(), Redirect(), Json(), File(), PartialView()...
    // ViewData/ModelState/TempData/RouteData/Url/Html/HttpContext 等便利屬性
}

Controller 同時實作四大過濾器介面,使 Controller 本身可作為全域/區域過濾器參與管線。ExecuteCore 為核心執行邏輯入口,子類別可覆寫擴展。

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