.NET?6開發(fā)TodoList應(yīng)用實(shí)現(xiàn)系列背景
前言:
想到要寫這樣一個(gè)系列博客,初衷有兩個(gè):一是希望通過(guò)一個(gè)實(shí)踐項(xiàng)目,將.NET 6 WebAPI開發(fā)的基礎(chǔ)知識(shí)串聯(lián)起來(lái),幫助那些想要入門.NET 6服務(wù)端開發(fā)的朋友們快速上手,對(duì)使用.NET 6開發(fā)后端服務(wù)的技術(shù)全貌有一個(gè)基本的認(rèn)識(shí)和掌握,順便把自己的技能樹檢查一遍;二是希望為國(guó)內(nèi)的.NET環(huán)境有一些小小的幫助,最早我自己是做C#桌面應(yīng)用出身的,但是隨著互聯(lián)網(wǎng)產(chǎn)業(yè)的繁盛和微軟早年間的固執(zhí),使得國(guó)內(nèi)的.NET開發(fā)環(huán)境收縮到幾個(gè)固定的領(lǐng)域,以致于很多人今天依然認(rèn)為C#和.NET不適合做大型的企業(yè)級(jí)應(yīng)用,這個(gè)觀念需要改變了。我無(wú)意比較技術(shù)和語(yǔ)言之間的好壞,只是更愿意看到國(guó)內(nèi)的技術(shù)環(huán)境也能呈現(xiàn)出百家爭(zhēng)鳴的狀態(tài)。經(jīng)過(guò)微軟這么多年的改變和進(jìn)步,.NET 6是一個(gè)很優(yōu)秀的框架,這一點(diǎn)自從我最開始接觸.NET Core 2
起一年一年進(jìn)化到現(xiàn)在,就深切地感受到,那好東西就拿出來(lái)和大家分享一下。
1.列說(shuō)明
在這個(gè)系列博客中,我將會(huì)使用.NET 6從頭開始一步一步開發(fā)一個(gè)TodoList
單體應(yīng)用,在這個(gè)過(guò)程中盡可能將多的知識(shí)點(diǎn)獨(dú)立成每篇文章,最后將應(yīng)用通過(guò)Docker
進(jìn)行打包,并使用Github
的Action
和Azure Container Instance
服務(wù)實(shí)現(xiàn)CI/CD。
選擇TodoList的原因是這個(gè)項(xiàng)目足夠簡(jiǎn)單,但是也足夠去覆蓋我希望覆蓋到的知識(shí)點(diǎn),對(duì)于讀者來(lái)說(shuō),有以下一些建議的前置要求:
- 需要會(huì)寫C#,不需要.
NET (Core)
相關(guān)的開發(fā)經(jīng)驗(yàn)。 - 需要后端服務(wù)的開發(fā)經(jīng)驗(yàn),對(duì)基本的服務(wù)端相關(guān)特性有一定的認(rèn)識(shí)。
- 有對(duì)
Clean Architecture
的基本理解。
2.系列導(dǎo)航
2.1 使用.NET 6開發(fā)TodoList應(yīng)用文章索引
附:.NET 6 Web API項(xiàng)目代碼上的變化
2.1.1創(chuàng)建項(xiàng)目
mkdir ProjectName && cd ProjectName dotnet new sln -n SampleApi dotnet new project -f net6.0 -n SampleApi -o SampleApi dotnet sln SampleApi.sln add SampleApi/SampleApi.csproj dotnet restore dotnet run -p SampleApi/SampleApi.csproj
2.1.2.NET 6 WebAPI Program.cs的變更
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
2.1.3Change 1: Top-level statements
頂級(jí)聲明使得我們?cè)诰帉?code>Program類時(shí)可以不用再定義該類,省略Main函數(shù)定義,直接開始寫方法體。編譯器會(huì)在編譯階段為我們自動(dòng)加上命名空間和相關(guān)定義。
2.1.4Change 2: Implicit using directives
隱式using
指令是編譯器根據(jù)項(xiàng)目類型,在編譯階段自動(dòng)生成一個(gè)名為CompanyEmployees.GlobalUsings.g.cs
的文件,
內(nèi)容如下:
// <auto-generated/> global using global::Microsoft.AspNetCore.Builder; global using global::Microsoft.AspNetCore.Hosting; global using global::Microsoft.AspNetCore.Http; global using global::Microsoft.AspNetCore.Routing; global using global::Microsoft.Extensions.Configuration; global using global::Microsoft.Extensions.DependencyInjection; global using global::Microsoft.Extensions.Hosting; global using global::Microsoft.Extensions.Logging; global using global::System; global using global::System.Collections.Generic; global using global::System.IO; global using global::System.Linq; global using global::System.Net.Http; global using global::System.Net.Http.Json; global using global::System.Threading; global using global::System.Threading.Tasks;
也可以在CompanyEmployees.csproj
工程配置文件中修改以下屬性,禁用全局隱式using
指令這一特性:
<!-- <ImplicitUsings>enable</ImplicitUsings> --> <ImplicitUsings>disable</ImplicitUsings>
2.1.5Change 3: No Startup class
到了.NET 6,陪伴我們好幾個(gè)版本至今的ConfigureServices and Configure
方法終于消失了,取而代之的是這兩部分的配置都集中在了Program.cs
中。曾經(jīng)寫過(guò).NET Core WebAPI
的小伙伴不難看出來(lái)現(xiàn)在應(yīng)該寫在哪里。
對(duì)于一些大型項(xiàng)目來(lái)說(shuō),這兩部分我們肯定不能就這樣寫在Program.cs
里面,后面將會(huì)想辦法把這兩部分單獨(dú)拆開進(jìn)行配置。
當(dāng)然,老版本的含有Startup.cs
的項(xiàng)目在.NET 6下打開沒有任何問題。
2.2 關(guān)于Pipeline的一些知識(shí)點(diǎn)
2.2.1Pipeline Sequence
- ExceptionHandler
- HSTS
- HttpsRedirection
- Static Files
- Routing
- CORS
- Authentication
- Authorization
- Custom Middlewares
- Endpoint Configuration
2.2.2app.Run和app.Use
app.Run
用于終止Pipeline
的鏈?zhǔn)秸{(diào)用并向客戶端返回
public static void Run(this IApplicationBuilder app, RequestDelegate handler); public delegate Task RequestDelegate(HttpContext context);
app.Use
用于向Pipeline
中插入一段邏輯作為鏈?zhǔn)秸{(diào)用的其中一個(gè)環(huán)節(jié)
public static IApplicationBuilder Use(this IApplicationBuilder app, Func<HttpContext, Func<Task>, Task> middleware);
2.2.3app.Map和app.MapWhen
這兩個(gè)方法都是用于在middleware
的鏈?zhǔn)秸{(diào)用中進(jìn)行分支Pipeline
調(diào)用鏈處理。
public static IApplicationBuilder Map(this IApplicationBuilder app, PathString pathMatch, Action<IApplicationBuilder> configuration) public static IApplicationBuilder MapWhen(this IApplicationBuilder app, Func<HttpContext, bool> predicate, Action<IApplicationBuilder> configuration)
app.MapGet、app.MapPost、app.MapPut、app.Delete、app.MapMethods
在.NET 6中一個(gè)新增的特性叫做Minimal APIs
,允許應(yīng)用程序以這種形式響應(yīng)客戶端的請(qǐng)求,在快速構(gòu)建微服務(wù)應(yīng)用的過(guò)程中十分好用,在這個(gè)系列里,因?yàn)闃?gòu)建的是一個(gè)單體應(yīng)用,這部分知識(shí)點(diǎn)我打算放到第二個(gè)系列關(guān)于微服務(wù)開發(fā)實(shí)踐中去,看有沒有更合適的場(chǎng)景去展示。
到此這篇關(guān)于.NET 6開發(fā)TodoList應(yīng)用實(shí)現(xiàn)系列背景的文章就介紹到這了,更多相關(guān)NET 6開發(fā)TodoList實(shí)現(xiàn)系列背景內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- .NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)查詢分頁(yè)
- .NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)ActionFilter
- .NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)接口請(qǐng)求驗(yàn)證
- .NET?6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)DELETE請(qǐng)求與HTTP請(qǐng)求冪等性
- .NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)PUT請(qǐng)求
- .NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)全局異常處理
相關(guān)文章
詳解免費(fèi)開源的DotNet任務(wù)調(diào)度組件Quartz.NET(.NET組件介紹之五)
本篇文章主要介紹免費(fèi)開源的DotNet任務(wù)調(diào)度組件Quartz.NET(.NET組件介紹之五),具有一定參考價(jià)值,有興趣的可以了解一下。2016-12-12asp.net mvc實(shí)現(xiàn)簡(jiǎn)單的實(shí)時(shí)消息推送
這篇文章主要介紹了asp.net mvc實(shí)現(xiàn)簡(jiǎn)單的實(shí)時(shí)消息推送的相關(guān)資料,需要的朋友可以參考下2016-07-07詳解如何在ASP.Net Core中實(shí)現(xiàn)健康檢查
這篇文章主要介紹了詳解如何在ASP.Net Core中實(shí)現(xiàn)健康檢查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03ASP.NET MVC5網(wǎng)站開發(fā)項(xiàng)目框架(二)
這篇文章主要介紹了ASP.NET MVC5網(wǎng)站開發(fā)項(xiàng)目框架,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-09-09.NET 刷新頁(yè)面防止表單二次提交的實(shí)現(xiàn)方法
頁(yè)面上按鈕是服務(wù)器控件,現(xiàn)在刷新頁(yè)面要防止按鈕事件重復(fù)執(zhí)行。這篇文章給大家?guī)?lái)了.net刷新頁(yè)面防止表單二次提交的實(shí)現(xiàn)方法,非常不錯(cuò),感興趣的朋友一起看看吧2016-09-09關(guān)于.NET6?Minimal?API的使用方式詳解
本文我們主要是介紹了ASP.NET?Core?6?Minimal?API的常用的使用方式,在.NET6中也是默認(rèn)的項(xiàng)目方式,整體來(lái)說(shuō)卻是非常的簡(jiǎn)單、簡(jiǎn)潔、強(qiáng)大、靈活,不得不說(shuō)Minimal?API卻是在很多場(chǎng)景都非常適用的2021-12-12