[AI 分享] .NET 11 的 ASP.NET Core 與 Blazor:效能、安全與開發效率
摘要:整理 .NET 11 網頁開發新功能,涵蓋效能、資安、Blazor 與開發工具。
內容:
Daniel Roth 是 .NET 團隊負責 ASP.NET Core 與 Blazor 的首席產品經理。他在演講中指出,選擇網頁開發平台是一項長期投資:團隊不只需要它能穩定執行,也需要它持續應對安全威脅,並在產品需求成長時,協助開發者有效交付。這場演講以「效能、防護、開發效率」三個面向,介紹 .NET 11 中 ASP.NET Core 與 Blazor 的改進。
效能:從大規模服務累積的改進
.NET 支撐 Microsoft 多項服務,包括 Copilot、Teams、Bing、Azure 與 Xbox。因此,執行階段與網頁技術堆疊的效能改善,不只來自基準測試,也受到每天處理大量請求與使用者的實際工作負載驅動。
以 MSN、Edge 和 Windows 的個人化內容提要為例,這些服務每月提供數十億次網頁瀏覽。演講中提到,相關團隊從 .NET 8 升級到 .NET 10 後,回報 P95 垃圾回收暫停時間降低 29%、非同步外掛程式延遲降低 11%,執行緒集區佇列也縮短 20%。應用程式不必具備同等規模的流量,仍能受益於這類執行階段改進。
在 .NET 11 中,效能工作延伸至整個網頁堆疊,包括 JIT 最佳化、降低記憶體配置壓力、加快 JSON、字串、正規表示式與 HTTP 處理,以及減少可觀測性功能的額外負擔。對 Blazor 而言,改進包括縮小網頁元件下載大小、支援靜態伺服器端渲染快取,以及暫停閒置的伺服器連線通道,以釋放伺服器資源。其中許多改善可透過升級直接取得。
Kestrel 的不良請求處理是具體例子。過去,格式錯誤的 HTTP 請求會經過例外傳遞與一般回應設定流程;在 .NET 11 中,剖析器可直接回傳錯誤結果,Kestrel 再使用預先配置的片段寫出回應。HTTP 行為與診斷資訊維持不變,但處理成本更低。在單核心基準測試中,不良請求的處理量因此約提高 30%,也讓伺服器有更多運算資源處理正常流量。
安全:減少重複工作,持續更新防護
瀏覽器、驗證方式與攻擊手法不斷演變,安全性不可能在單一版本中「完成」。.NET 11 持續改善應用程式所依賴的基礎設施,包括自動跨網站請求偽造(CSRF)防護、更一致的授權中繼資料處理、長時間連線的驗證狀態更新,以及傳輸和請求處理強化。Blazor 對限制較嚴格的內容安全政策(CSP)也有更好的相容性。這些平台防護不能取代應用程式本身的安全設計與設定,但能減少團隊必須自行實作的基礎工作。
CSRF 防護旨在避免其他網站濫用使用者已登入的瀏覽器,向應用程式送出偽造請求。演講介紹的 .NET 11 機制會利用現代瀏覽器提供的 Fetch Metadata 標頭判斷請求來源,並預設啟用防護;開發者不必為此產生與驗證防偽權杖。基準測試顯示,相較於以權杖驗證為基礎的方式,新的標頭判斷方式每秒可處理約四倍的請求,且每個請求的記憶體配置量約減少 65%。
示範使用客服退貨網站:客服人員可為客戶選擇退款或更換商品,最後確認處理結果。當另一個來源的網站嘗試偽造確認請求時,ASP.NET Core 將其拒絕並回傳 HTTP 400;由原應用程式送出的表單請求則可正常通過。瀏覽器開發工具顯示了用於判斷來源的 Fetch Metadata 資訊,而應用程式的 Program.cs 並未加入防偽權杖的產生或驗證程式碼。
另一項安全改進是長時間連線的驗證更新。SignalR 連線可能持續到原有憑證過期,導致連線保留過時的驗證狀態。在 .NET 11 中,SignalR 可使用應用程式取得的新憑證,更新既有連線的使用者驗證資訊,而不必先中斷再重新連線。開發者可在 Hub 選項中啟用驗證更新,也可設定在更新失敗時關閉連線;JavaScript 用戶端可透過 withAuthenticationRefresh 選用自動更新。Blazor Server 則已為元件 Hub 與用戶端安排相關設定。
演講以客服權限變更展示這項能力:管理員移除某位客服的退款核准權限後,客服頁面在下一次驗證更新時改變顯示狀態,並不再允許退款。既有連線沒有中斷,客服先前輸入的更換商品資料也沒有遺失。示範中的介面透過授權政策呈現權限狀態,儲存時也會再次執行授權檢查。講者特別說明,這是依權杖到期時間定期觸發的更新,不是事件發生當下立即推送;示範縮短了更新間隔,以便觀察效果。
開發效率:共用 C# 技能與生態系資源
ASP.NET Core 讓團隊運用共通的 C# 技能、程式庫與工具,建立 API 和網頁介面;Razor 工具、Hot Reload 與 AI 輔助則有助於縮短迭代時間。講者舉 Toscano Digital 為例:其五人開發團隊在既有 Blazor 內部 CRM 之外,建立公開房地產入口網站,每年服務約 500 萬次工作階段與 1,100 萬次頁面瀏覽。團隊結合 .NET 與 Blazor 的不同渲染策略,兼顧搜尋可見度、行動裝置效能和豐富互動,並透過 C# 全端開發及平台內建功能提高生產力。
Blazor 生態系也獲得合作夥伴投入。Infragistics 將超過 50 個 Ignite UI for Blazor 元件以免費、開源方式提供,涵蓋資料格、清單、輸入、導覽與版面配置等。Syncfusion 則推出免費開源的 Syncfusion Toolkit for Blazor,包含圖表、輸入、行事曆與對話方塊。這兩項產品均採 MIT 授權,可用於商業用途,且與廠商原有的商用元件套件分開提供。除了元件,Infragistics 也為 .NET 11 貢獻可找出常見錯誤的 Blazor 分析器;Syncfusion 則投入框架與鷹架修正、診斷訊息改善,以及新功能測試。
C# Union、OpenAPI 與非同步驗證
.NET 11 的 ASP.NET Core 支援在 API 和網頁介面中使用 C# Union。以退貨處理為例,同一個結果可以是「退款」或「更換商品」,兩者具有不同欄位。開發者可用 Union 表達這兩種情況,讓 System.Text.Json 依實際值序列化對應內容,並由 ASP.NET Core 產生描述各種可能結果的 OpenAPI 3.2 Schema。示範中的 Minimal API 分別回傳退款與更換商品資料,不需要額外包裝物件或型別辨識欄位;Razor 與 Blazor 介面也可依 Union 的實際情況,呈現對應內容。
商業規則常需要查詢資料庫或呼叫其他服務,因此不一定能同步完成。.NET 11 的 Data Annotations 加入非同步驗證 API:AsyncValidation 屬性可建立可重複使用的自訂規則,IAsyncValidatableObject 則可進行物件層級、涉及多個欄位的檢查。Minimal API 與 Blazor 都支援這兩種方式。
示範中,客服選擇更換商品型號時,系統會非同步查詢庫存。頁面在等待期間顯示載入提示,並依結果告知商品是否有貨。實作上,更換商品的請求模型沿用一般資料註解驗證,另以自訂的 InStockAttribute 執行庫存檢查;Blazor 表單仍使用一般的 EditForm 與 Data Annotations 驗證器,並可透過相關 API 偵測驗證是否仍在進行。相同模型也能用於 Minimal API:無庫存的型號會得到驗證失敗結果,有庫存的型號則回傳 HTTP 200。
Blazor 大型清單與 Razor 工具改進
Blazor 的 Virtualize 元件會優先渲染可視範圍及附近的項目,避免一開始就建立整份大型清單。.NET 11 進一步支援高度不一的項目,讓展開後的列能隨內容增高;新的 Anchor 模式可控制新增或移除項目時,捲動位置如何維持,並改善清單變動時畫面跳動的情況。
客服佇列示範包含約 10,000 筆資料,仍可順暢捲動,項目也能展開為不同高度。使用者可跳至指定項目、清單開頭或結尾;若選擇將畫面固定在底部,且目前正位於底部,新增項目時畫面會跟隨。若使用者正在清單中段閱讀,新增項目則不會打亂目前位置。開發者可設定固定於頂端、底端、兩者或皆不固定,並透過新的 ScrollToItemAsync API 跳至指定項目。
Razor 在 Visual Studio 與 VS Code 中的開發體驗也持續改善,包括更豐富的程式碼動作、跨 C# 與 Razor 的重構支援,以及更快的 Hot Reload。開發者現在可將 .editorconfig 中的 C# 格式偏好套用到 Razor 檔案,排序或移除未使用的 using 指示詞,並以較精簡的 ~/ 語法指定網頁資產路徑,取代較舊的 @assets 寫法。Visual Studio 的 Razor 編輯器也支援 Emmet 縮寫,可快速展開 HTML 結構。
其他工具改進包括:可透過命令列的 .NET scaffold 工具,或 Visual Studio 的「新增鷹架項目」,為 Blazor 網頁應用程式設定以 Entra ID 為基礎的驗證。團隊也與 GitHub Copilot 合作,在 github.com/dotnet/skills 提供 .NET 相關 AI 外掛與技能,涵蓋 ASP.NET Core API、Blazor 元件、表單、驗證,以及一般 .NET、C# 和 Razor 開發知識,並以評估測試持續檢驗其效果。
Aspire、Blazor WebAssembly 與背景 Web Worker
Aspire 可協助團隊在本機連接、執行及偵錯完整應用程式,現在也能與 Blazor WebAssembly 應用程式整合,使瀏覽器端與後端的開發流程結合設定、服務探索與遙測。新的 Blazor Gateway 元件可在開發及正式環境中,為 Blazor WebAssembly 應用程式提供一致的託管方式。相關專案範本也包含用於用戶端整合的 Client Defaults,以及執行背景工作的 Worker 專案。
.NET 11 亦支援讓 Blazor WebAssembly 的 .NET 程式碼在背景 Web Worker 執行,將耗費 CPU 的工作移出 UI 執行緒。示範中的裝置支援網站可上傳診斷資料並進行分析:若在 UI 執行緒分析,介面會短暫失去回應;改用 Web Worker 後,分析仍可持續,使用者也能操作頁面。示範同時展示 Aspire 儀表板中的 Blazor 應用程式與後端 API,以及瀏覽器偵錯入口;介面則使用了 Infragistics 和 Syncfusion 提供的免費開源 Blazor 元件。
總結而言,Daniel Roth 希望開發者將 ASP.NET Core 與 Blazor 視為能長期信賴的網頁平台:以持續的效能改善支援應用程式運作,以平台層級的安全機制保護使用者,並藉由共通的 C# 開發體驗、工具與生態系資源協助團隊交付產品。演講涵蓋了 .NET 11 的部分新功能;想進一步了解其他改進,可參考 .NET Conf 的相關場次。