介紹.NET歷史、開源之路、基礎、路由、依賴註入、HttpContext、cookie|session、HttpClient、gRPC、單元測試、發佈部署等等。 ...
開源跨平臺的.NET Core,還沒上車的趕緊的,來不及解釋了……
本系列文章,主要分享一些.NET Core比較優秀的社區資料和微軟官方資料。我進行了知識點歸類,讓大家可以更清晰的學習.NET Core。
首先感謝資料原作者的貢獻。
第一篇:.NET Core 學習資料精選:入門
介紹.NET歷史、開源之路、基礎、路由、依賴註入、HttpContext、cookie|session、HttpClient、gRPC、單元測試、發佈部署等等。
第二篇:.NET Core 學習資料精選:進階&高級
這是第一篇,知識點如圖:
.NET 簡介
#、.NET 開源之路
2014.11月 .NET Core 項目啟動,2016.06月 .NET Core 1.0 發佈
#、.NET Core提供的特性
1.開源、免費
2.輕量級、跨平臺
3.組件化、模塊化、IOC+Nuget、中間件
4.高性能
5.統一了MVC和WebAPI編程模型
a) 比如:ASP.NET Core 中MVC 和Web API 直接或間接繼承同一個基類 ControllerBase,提供可使用的API也一致化
b) 比如:舊ASP.NET時代,寫全局filter需要針對MVC 和Web API 分別編寫代碼,但在ASP.NET Core,直接使用一套中間件代碼即可
6.可測試性
7.微服務、容器化支持
8.標準化 .NET API 規範- .NET STANDARD
#、遷移到.NET Core
目前市面上還存在很多傳統 .NET 舊項目,我們需要根據公司情況決定是否升級到.NET Core。
如果需要進行舊項目升級的,可以參考文章:《.NET項目遷移到.NET Core操作指南》
VS和.NET Core安裝
安裝 .NET Core Runtime 和.NET Core SDK
【微軟官方文檔】ASP.NET Core *.* 個版本新特性
[坑]安裝 .Net Core 2.2 SDK後,VS2017依然不能設置core2.2為目標框架
基礎
.NET Core 運行程式註意事項(dotnet dll 與 dotnet run)
ASP.NET Core 中使用多個環境(開發、預發佈、生產)- 預設為 Production
ASP.NET Core 動作結果(ActionResult)
ASP.NET Core 中控制器操作的多路徑返回類型(IActionResult)
.NET Core 3.0 新的System.Text.JsonAPI
配置
ASP.NET Core 中的配置(json、xml、命令行、環境變數、記憶體變數等)
.Net Core 自定義配置源從遠程API讀取配置(ConfigurationProvider)
路由、模型綁定
ASP.NET Core WebAPI中,Controller標註 [ApiController] 特性,其路由只能使用[route]特性方式
ASP.NET Core MVC 構建可讀性更高的ASP.NET Core 路由
ASP.NET Core 中的自定義模型綁定(IModelBinder)
依賴註入(IOC、DI)
什麼是控制反轉,和依賴註入:
控制反轉的意思就是:平常我們需要一個類對象的時候需要new出來,而現在我們把new一個類對象的工作交給了IOC容器,當我們需要一個類對象的時候直接向IOC容器要,就可以了,這個就是控制反轉。(控制權交個了IOC容器)
依賴註入的意思就是:當我需要一個類對象,IOC容器給我們這個類對象的過程其實就是依賴註入,依賴註入有構造函數註入和屬性註入。
官方推薦通過構造函數。這也是所謂的顯式依賴。Asp.Net Core 的標準依賴註入容器不支持屬性註入。(可以使用autofac或者其他來實現屬性註入)
可以參考 OSharp 框架,設計三個全局註入介面,來實現自動化註入:ISingletonDependency 和 ITransientDependency 、 IScopedDependency ( 單例、瞬時、範圍)。
案例1:使用nlog時,想根據需要使用不同的配置文件Nlog.config 寫日誌時,就可以使用文章中介紹的 Factory 命名註入方案來實現
案例2:使用分散式緩存 IDistributedCache 時,想根據需要在一個項目中同時使用redis和sqlserver
ASP.NET Core 中多個介面對應同一個實現的正確姿勢
[OSharp]使用 IServiceProvider.GetService<T>() 實現按需註入,優化性能
#、ASP.NET Core 集合 Autofac 的使用
Asp.Net Core 2.0 之旅---AutoFacIOC容器的使用教程
Asp.Net Core 2.0 之旅---AutoFac倉儲泛型的依賴註入(泛型註入)
Asp.Net Core 2.0 之旅---數據訪問倉儲模式的事務管理(uow+rp)
ASP.NET Core 中使用Autofac實現屬性註入的代碼片段
public IServiceProvider ConfigureServices(IServiceCollection services) { // 第一步:替換系統預設Controller創建器(否則Controller下麵無法使用屬性註入) // 在 services.AddMvc() 之前 services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>()); services.AddMvc(); var builder = new ContainerBuilder(); // 第二步:找到所有Controller的類型 // 通過Autofac對Controller類型進行屬性註冊 PropertiesAutowired() var assembly = this.GetType().GetTypeInfo().Assembly; var manager = new ApplicationPartManager(); manager.ApplicationParts.Add(new AssemblyPart(assembly)); manager.FeatureProviders.Add(new ControllerFeatureProvider()); var feature = new ControllerFeature(); manager.PopulateFeature(feature); builder.RegisterTypes(feature.Controllers.Select(ti => ti.AsType()).ToArray()).PropertiesAutowired(); // 第三步:配置 ContainerBuilder,返回 IServiceProvider builder.Populate(services); return new AutofacServiceProvider(builder.Build()); }
ASP.NET Core WebAPI
創建ASP.NET Core Web API (ControllerBase、參數綁定源)
ASP.NET Core:MVC 與 Razor Pages
ASP.NET Core MVC 靜態文件目錄配置與訪問授權
新的 Razor 機制
ASP.NET Core 中的 Razor 頁面介紹(OnGet、OnPost、單頁多Handler方式)
ASP.NET Core 中 Razor 頁面的IPageFilter
ASP.NET Core 中 Razor 頁面的路由和應用約定
ASP.NET Core Razor 配置:預編譯,動態編譯,混合編譯
WebForm & MVC & Razor Pages
[譯]ASP.Net Core 2.0中的Razor Page不是WebForm
ASP.NET Core Razor頁面簡化了 ASP.NET MVC 應用程式
HttpContext
ASP.NET Core 中訪問 HttpContext 的方法
ASP.NET Core 中通過IHttpContextAccessor實現公用靜態HttpContext
狀態管理
常見方式:Cookie、Session、TempData、查詢字元串、HttpContext.Items、緩存、依賴關係註入
#、session
ASP.NET Core 在通用數據保護條例規則下使用 session
#、cookie
ASP.NET Core SameSite 設置引起 Cookie 在 QQ 瀏覽器中不起作用
[github]ASP.NET Core CookieManager