ASP.NET Core 6 Minimal API
ASP.NET Core 6 Minimal API
Intro
微軟在 ASP.NET 6 Preview 4 的介紹文章中介紹了即將到來的 ASP.NET Core 6 中的最小 API 的雛形,我們現在已經基本可以達到最小化 API 了雛形了,在 Preview 4 的時候就寫了這個小示例,但是不夠簡潔,沒有達到最簡潔的代碼,現在在 Preview 5 上嘗試一下,感覺已經很簡潔了,于是就想分享一下
Sample-0
在 Preview 4 的時候,示例是下面這樣的:
using?System; using?Microsoft.AspNetCore.Builder;var?app?=?WebApplication.Create(args); app.Map("/",?(Func<string>)(()?=>?"Hello?World")); app.Run();主要是使用了新增的 WebApplication/WebApplicationBuilder API,然后結合了 C# 9 中的 Top-Level Statement,去掉了 Main 方法的聲明
C# 10 New Features
在即將到來 C# 10 中的兩個新特性可以幫助我們簡化這個特性,分別是:
global using
lamdba 優化
通過 global using 這個 feature 我們可以實現命令空間的統一管理這樣就可以避免寫很多 namespace 的引用了,我們可以把常用的 namespace 放在一個文件中管理,類似于 MVC 中的 _ViewImports.cshtml 和 Razor Page 中的 _Imports,這樣就可以簡化上面的 using 了,之前看介紹說是,ASP.NET Core 6 會把 ASP.NET Core 相關的常用的命令空間通過 global using 的方式默認引用,這樣上面的示例中就不需要再引用命名空間了。
另外一個 feature 則是對于 lambda 表達式的優化,可以自動進行類型推斷來隱式的轉換成委托,就可以簡化上面強制類型轉換成 Func<string> 了,就可以自動的隱式轉換了,
除此之外,我們還可以方便的在 lamdba 表達式上加 Attribute 注解,這有助于大大簡化 API 書寫的復雜度,具體看后面的示例吧
Sample-1
使用 C# 10 新特性之后的代碼:
var?app?=?WebApplication.Create(args); app.Map("/",?()?=>?"Hello?World"); app.Run();主要有兩點變化,一個是 Func<string> 的轉換不再需要了,一個是命名空間的引用,會放在一個單獨 Imports 文件中添加全局的命名空間引用
Imports 內容如下:
global?using?System; global?using?System.Collections.Generic; global?using?System.Linq; global?using?System.Threading.Tasks; global?using?Microsoft.AspNetCore.Builder; global?using?Microsoft.AspNetCore.Http; global?using?Microsoft.AspNetCore.Mvc; global?using?Microsoft.AspNetCore.Hosting; global?using?Microsoft.AspNetCore.Routing; global?using?Microsoft.Extensions.DependencyInjection; global?using?Microsoft.Extensions.Hosting; global?using?Microsoft.Extensions.Logging; global?using?Microsoft.Extensions.Configuration;上面提到了我們可以很方便在 lamdba 表達式上使用 Attribute,下面我們就來一個例子:
var?app?=?WebApplication.Create(args); app.MapPost("/info",?[HttpPost](IWebHostEnvironment?env)?=>?new? {Time?=?DateTime.UtcNow,env.EnvironmentName? }); app.Run();除了 Attribute,我們還可以添加參數,參數可以自動從依賴注入服務中獲取,如上面的 IWebHostEnvironment
接著我們來測試一下我們的 API 看試試 work 了吧,現在我們已經可以使用 dotnet watch 來運行項目,會自動啟用 Hot Reload,但是測試發現,感覺現在的 ASP.NET Core 里的 Hot Reload,還是有點問題,需要使用 Ctrl + R 來重新 build 才能生效,不知道是不是我姿勢不對,不知道大家有沒有遇到這樣的問題,希望后面的版本能夠解決這個問題
可以通過 dotnet watch 來啟動項目
接著我們就可以通過 http://localhost:5000 或者 https://localhost:5001 來訪問我們的 API 了
訪問 http://localhost:5000,會看到下面的結果
直接訪問 http://localhost:5000/info,會看到類似下面的結果,這是因為我們的 info API 只允許 POST 方式進行訪問
通過工具用 POST 方式訪問 http://localhost:5000/info,可以看到類似下面的結果
可以看到我們的 API 都已經正常工作了~~
More
上面的示例代碼可以在 Github 上獲取 https://github.com/WeihanLi/SamplesInPractice/tree/master/net6sample/MininalAPI
編譯需要安裝 .NET 6 ?preview 5 環境
目前 .NET 6 Preview 還是有一些問題的,還不太建議大家實際項目進行升級,當然自己想嘗試是可以的
如果使用遇到了什么問題,也可以通過 Github 上的 issue 向微軟反饋 https://github.com/dotnet/core/issues/6389
References
https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-preview-4/
https://github.com/WeihanLi/SamplesInPractice/tree/master/net6sample/MininalAPI
總結
以上是生活随笔為你收集整理的ASP.NET Core 6 Minimal API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hello Blazor:(1)像ASP
- 下一篇: WPF任务栏同步进度