2019.12.04 .NET Core 3.1已經正式發布了,對於前一篇博文《.NET Core 學習資料精選:入門》大家學的可還開心?這是本系列的第二篇文章:進階篇,喜歡的園友速度學起來啊。
對於還在使用傳統.NET Framework 框架的園友,可以通過《.NET項目遷移到.NET Core操作指南》把需要新生力量的舊項目速度遷移到.NET Core 中
本系列文章,主要分享一些.NET Core比較優秀的社區資料和微軟官方資料。我進行了知識點歸類,讓大家可以更清晰的學習.NET Core。
首先感謝資料原作者的貢獻。
介紹.NET歷史、開源之路、基礎、路由、依賴注入DI、HttpContext、cookie|session、HttpClient、gRPC、單元測試、發布部署等等。
介紹.NET工程化、AOP、異常處理、緩存、日志、響應優化、上傳下載、健康檢查、后台任務、認證和授權、安全性(Https、CORS、CSRF)、EF Core 等等
第三篇:.NET Core 學習資料精選:高級&微服務架構
介紹性能、原理、微服務架構、Docker、DDD等知識
這是第二篇,知識點如圖:
.NET 工程化
#、StyleCop編碼規范
netcore將StyleCop.Analyzers自定義規則應用到整個解決方案
#、Nuget包
使用 Visual Studio 創建和發布 NuGet 包
vs項目文件信息批量編輯、打包工具:ProjectFileManager
#、Swagger Api文檔
Swagger+AutoRest 生成web api客戶端(.Net)
Swashbuckle方式
Asp.Net Core 使用Swagger生成API文檔並添加API分組
Asp.Net Core 使用Swagger生成API文檔並添加文檔描述、響應類型描述
Asp.Net Core 給API的Model生成說明文檔、隱藏某些API
Swashbuckle swagger 4 認證遷移至Swashbuckle.AspNetCore version 5
NSwag方式
Asp.Net Core 使用NSwag生成Swagger Api文檔
借助 NSwagStudio 工具可為包含 Swagger 的第三方 API,生成API客戶端代理代碼
AOP面向切面編程
AOP(Aspect-Oriented Programming)是一種將函數的輔助性功能與業務邏輯相分離的編程范式(programming paradigm),其目的是將橫切關注點(cross-cutting concerns)分離出來,使得程序具有更高的模塊化特性。
AOP體現原則:單一職責原則 和 開放封閉原則
在ASP.NET Core中可使用三種方式實現AOP:中間件Middleware、過濾器Filter、代碼織入(靜態織入和動態代理)
#、中間件Middleware(管道級)
中間件就是嵌入到應用管道中用於處理請求和響應的一段代碼,ASP.NET Core 中使用了大量的中間件。eg:全局異常、路由、響應緩存、響應壓縮、身份認證、CORS、日志記錄等等
ASP.NET Core Middleware 的實現(Conventional Middleware 和IMiddleware)
ASP.NET Core Middleware 的實現(Run,Map,Use,內置中間件)
#、過濾器Filter(action級)
ASP.NET Core MVC Filter的定義、注冊和各種Filter執行順序
#、代碼織入(對象的攔截器)
l 編譯時靜態織入
特點:[編譯型]性能高,缺點是缺乏靈活性
實現思想:給語言的編譯器做擴展,使得在編譯程序的時候編譯器將相應的“切面”代碼織入到業務代碼的指定連接點,輸出整合的結果。
l 運行時動態織入(動態代理)
特點:[運行時動態代理]靈活性高,性能相對“靜態織入”低
實現方式:將擴展添加到運行虛擬機而不是編譯器。切面代碼和業務代碼分別獨立編譯,而在運行時由虛擬機在必要時進行織入。
.Net AOP代碼織入實現類型及原理(靜態、動態、優缺點)
.Net AOP代碼織入之《攔截方法》(包含案例:數據事物、多線程)
演示了清晰的業務代碼,因為非功能性需求(eg:logging,防御性編程,事務,重試,和異常處理等)導致代碼變得冗長、難懂、不易維護。通過使用AOP來讓業務代碼重新清晰化
.NET Core 泛型倉儲和聲明式事物實現最優雅的crud操作
異常處理
ASP.NET Core 應用的錯誤處理[1]:三種呈現錯誤頁面的方式
使用UseStatusCodePages 根據Status選擇處理方式(跳轉頁面)
ASP.NET Core 自定義ErrorHandlingMiddleware 全局異常捕獲
緩存
.NET Core MemoryCache 緩存過期策略(絕對、滑動、依賴、過期回調)
ASP.NET Core 使用分布式緩存(redis、sqlserver)
ASP.NET Core 使用RedLock.net 實現分布式鎖
日志
[github]ASP.NET Core Microsoft.Extensions.Logging 默認log組件
分布式日志
.NET Core中使用Exceptionless分布式日志框架
Exceptionless 5.0.0 本地Docker快速部署介紹
.NET Core 快速搭建Docker-ELK分布式日志中心
響應優化
ASP.NET Core 中使用ResponseCache 響應緩存
上傳下載
ASP.NET Core 中的文件上傳(IFormFile)、流式處理上傳大文件
健康檢查
ASP.NET Core 中的運行狀況檢查(IHealthCheck)
[github]ASP.NET Core HealthChecks(健康檢查,異常webhooks通知)
使用案例:
使用ASP.NET Core實現Docker的HealthCheck指令
Kubernetes liveness and readiness probes using HealthChecks
其他特性
#、對象池ObjectPool
#、WebHooks
WebHooks with ASP.NET Core – DropBox and GitHub
后台任務
基礎知識
ASP.NET Core 中使用托管服務實現后台任務(后台任務、作用域任務、隊列任務)
.NET Core 3.0 創建Windows服務項目(BackgroundService)
特點:不需要Windows服務或單獨的進程
ASP.NET Core 中使用Hangfire任務管理(含Dashboard)
Hangfire 授權、自定義路由、只讀Dashboard、多數據庫源、設置主應用
ASP.NET Core 中使用Hangfire.Redis.StackExchange存儲
ASP.NET Core 中Hangfire.Cronos 結合BackgroundService 實現任務調度
使用ASP.NET Core和Hangfire實現HTTP異步化方案
Quartz.Net幾種部署模式(IIS、Exe、服務部署【借助TopSelf、服務類】)
ASP.NET Core2.2+Quartz.Net 實現web定時任務
Quartz.NET 配置文件詳解(quartz.config 和quartz_jobs.xml)
----quartz.config可以合並到App.config和Web.config中
quartz.net 3.x版本如何通過xml文件進行Job配置
配置Quartz.NET Cluster以及遠程管理(CrystalQuartz)
Quartz.NET 可視化Job管理(CrystalQuartz)
認證和授權
理解ASP.NET Core驗證模型(Claim, ClaimsIdentity, ClaimsPrincipal)
#、ASP.NET Core Identity身份認證
命名空間:Microsoft.AspNetCore.Identity
創建完整的ASP.NET Core Identity基架(多圖)
ASP.NET Core Identity配置(聲明類型、鎖定策略、密碼策略、登錄策略等等)
雙因素認證
ASP.NET Core Identity身份驗證支持OAuth2第三方驗證提供程序
ASP.NET Core Idendity自定義存儲提供程序(Azure表存儲、Dapper)
#、基於Cookie的身份認證
命名空間:Microsoft.AspNetCore.Authentication.Cookies
ASP.NET Core Cookie身份驗證支持OAuth2第三方驗證提供程序
#、授權
命名空間:Microsoft.AspNetCore.Authorization
ASP.NET Core web api基於JWT自定義策略授權
ASP.NET Core Authentication and Authorization
ASP.NET Core JWT認證、更改Token來源、更改Token驗證方式
#、IdentityServer4 認證授權
[曉晨Master]IdentityServer4 中文文檔與實戰
安全性
在.NET Core中使用 MachineKey (NuGet包:AspNetTicketBridge)
ASP.NET Core 優雅的在開發環境保存機密(User Secrets)--secrets.json
#、HTTPS
HTTP Strict Transport Security (HSTS) in ASP.NET Core
.NET Core 強制使用https,把所有的HTTP請求轉換為HTTPS
#、Data Protection 機制 (.NET Core 數據保護)
ASP.NET Core 數據保護(Data Protection)【上】
ASP.NET Core 數據保護(Data Protection)【中】
ASP.NET Core 數據保護(Data Protection 集群場景)【下】
#、CORS
#、CSRF
ASP.NET Core 防止跨站點請求偽造(XSRF/CSRF) 攻擊
ASP.NET Core WebAPI 中防御跨站請求偽造攻擊(CSRF)
EF Core
SQL Server Profiler的簡單過濾使用,方便查找和發現SQL執行的效率和語句問題
EF Core DbFirst:從數據庫生成實體類(反向工程)
EF Core CodeFirst:從實體創建數據庫--示例
EF Core CodeFirst:從實體創建數據庫--命令和語法
EFCore數據庫遷移命令(使用Script-Migration命令生成遷移sql語句)
遷移疑問
如何理解 Code-First migration, up/down方法?
全局唯一Id、有序GUID
模型配置
關系數據庫建模
EF Core 生成跟蹤列(eg:CreatedAt,CreatedBy等列)
並發
數據查詢
EF 中 IEnumerable,IQueryable ,Include 的用法
EF Core 關聯數據加載策略(預先加載、顯示加載、延遲加載)
EF Core 跟蹤與非跟蹤查詢(AsNoTracking)
批量數據操作
EF Core 原生支持的批量插入操作(sp_executesql)
[收費]使用Entity Framework Extensions 實現批量增、刪、改
[免費]Entity Framework Extensions 提供功能縮減版:EntityFramework-Plus
看完”入門”和”進階”兩篇文章,對.NET Core的常用特性基本是掌握了的。接下來的”高級”篇,會介紹性能、原理、微服務架構、Docker、DDD等知識,不過這篇文章會過幾個月整理出,中間打算研究一些開源框架,並分享給大家。
==============================================================================
over,謝謝查閱,覺得文章對你有收獲,請多幫推薦。歡迎向我提供更好的資料信息。