【.NET 6】開發minimal api以及依賴注入的實現和代碼演示

前言:

.net?6?LTS版本發布已經有一段時間了。此處做一個關于使用.net?6?開發精簡版webapi(minimal?api)的入門教程演示。

1、新建一個項目。此處就命名為?SomeExample:

?af5e43ef725262885998cadb1086882b.png

2、選擇?.net6版本,并且此處先去掉HTTPS配置以及去掉使用控制器的選項:

?0daed520bbd6cdac39187874e8fcff7d.png

3、創建完成以后,原始畫面如下所示。并且,解決方案一欄只剩下program文件,其他文件都被精簡掉了。并且沒有Main函數入口和命名空間等。

?13402338683e186bea7f2d2ada268679.png

4、接下來開始做幾個簡單的webapi方法案例。先刪掉原有的,替換為自定義的來個webapi方法,一個Get,一個Post。具體代碼如下圖所示。

?907b73191274f8fe83870bad27f3fe29.png

5、運行以后,會打開自帶的swagger頁面。大佬們可以自行比對代碼部分和swagger部分的一些特點。

?3dd90e77c12bfe1f8cc89ad61a2faf55.png

6、執行HelloWorld這個Get方法的執行結果,如下圖所示。

?acad04fadd6169da1485399ea0e46655.png

7、執行HelloMiniApi這個Post方法的執行結果,如下圖所示。

?795cb736dd6d31b71591603eec265b8c.png

8、Api根據不同的用途,在swagger展示上面,咱們還可以對它進行一些分類。分類通過設置Tags標簽來實現,具體設置內容:在方法的末尾設置WithTags,里面指定分類的顯示的名稱。運行以后的swagger展示效果和有關代碼,如下圖所示。

?e071d99f07afe1b008e89cb1d3662e6b.png

9、對api方法進行分代碼文件管理。如果API方法很多,全寫在program里面也不現實。所以下面做個拓展。新建用于測試使用的靜態類?TestService,并且實現一個靜態方法 TestApi。其中,方法的參數必須是?this?WebApplication。然后就可以通過傳入的參數,來拓展實現webapi,例如此處新增一個ServiceApi的api方法,以及有關其他實現,如下圖所示。

?25246064464ec683b227c05d250c82f5.png

10、新增拓展的api以后,需要在program文件里面引用使用,詳細內容如下圖所示。

?2d41dbdbb5a72f73cdf7e1fe3d6b49f8.png

11、運行以后的swagger展示圖。

?c6580365b3ae300fdcf8401966a072ee.png

12、測試下執行結果,返回預期結果,說明測試成功。

?9a1ac30beeb3bb7832d2e74b0d8a01ed.png

13、測試下VS?2022熱重載的功能,在返回值里面進行修改,然后點擊熱重載小火苗按鈕進行熱更新。

?fee4898f8bd923e946c927db11a7a4be.png

14、熱更新以后,不需要重新編譯,直接在swagger展示頁對剛才設置的api方法進行調用,調用結果如下圖所示,說明熱重載更新成功。將來遇到需要調試的代碼時候,大佬們都可以很方便地進行熱更新,無需重新編譯,可以大大提高效率。

?7beafefc12e14830661827fc42460e03.png

15、接下來是依賴注入的驗證測試。新增一個測試服務類?TestDependencyInjection,具體實現內容如圖所示。

?a4d623ae0dba4da9963dd6e959c92813.png

16、TestDependencyInjection對應的接口?ITestDependencyInjection內容:

?30568a99479281a283ccdc58cc7bedc0.png

17、在program文件里面,對上面的服務進行注冊。此處注冊一個單例實例,具體代碼如下圖展示。

?2121c6a1ca3d594e7e577cb1cb1cc708.png

18、接下來是驗證依賴注入是否成功。此處我在ServiceApi這個webapi方法里面進行注入。注入需要注意事項:在webapi方法的委托類型的參數里面,第一個參數必須是HttpContext;然后后面是自己的參數,此處是注入服務的接口。并且在api方法里面調用了show方法進行驗證。

?52adb9352e44567e8eccbb6fa25d578b.png

19、運行程序,在swagger展示頁面點擊執行對應的webapi方法,并查看結果。如下圖所示,輸出show方法里面的內容,代表依賴注入成功。

?5e5e31533a4e45587a6174c6e3dd29be.png

20、再擴展個VS2019開始擁有的一個隱藏技能:引用的第三方或者nuget包時候(不限制.net?版本),在對應的封裝的類或者方法上面,按F12,可以直接進入到反編譯以后的代碼里面去,可以看到封裝的源碼。例如此處以UseSwagger為例,在此處按F12進去瞅瞅究竟。

?85893bc757146ed963a4977f2a4916ed.png

21、正常情況下咱們應該F12進去只能看見屬性名稱、方法名稱,看不到具體實現。而現在是可以看到具體實現的代碼的。如下圖所示,方法里面的具體代碼都有,也可以繼續進一步F12去看底層的代碼。

?80699573eb898bd785686933f517e7a4.png

以上就是該篇博客的全部內容,如果覺得有幫助,歡迎大家留言、轉發、推薦或點贊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283905.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(轉載)VS2010/MFC編程入門之四(MFC應用程序框架分析)

上一講雞啄米講的是VS2010應用程序工程中文件的組成結構,可能大家對工程的運行原理還是很模糊,理不出頭緒,畢竟跟C編程入門系列中的例程差別太大。這一節雞啄米就為大家分析下MFC應用程序框架的運行流程。 一.SDK應用程序與MFC應用程序運行過…

個人博客開發-開篇

邁出第一步: 很久以前就有這個想法,自己動手開發一套個人博客系統,終于,現在開始邁出了第一步。做這件事一點是做一個有個人風格的博客系統,第二點是對做這件事所使用的技術棧進行學習,所謂最好的學習就是實…

2022年中國中小學教育信息化行業研究報告

教育信息化丨研究報告 核心摘要: 背景篇 目前,我國中小學教育主要呈現信息時代教育的特征,智能時代教育特征初露端倪;中小學教育信息化正從量變邁向質變,創新引領與生態變革成為行業縱深的主旋律; 2021年…

使用curl指令發起websocket請求

昨日的文章沒指出websocket請求協商切換的精髓,刪除重發。前文相關:? .NET WebSockets 核心原理初體驗[1]? SignalR 從開發到生產部署避坑指南[2]tag:瀏覽器--->nginx--> server其中提到nginx默認不會為客戶端轉發Upgrade、Connectio…

Yii 2 的安裝 之 踩坑歷程

由于剛接觸yii2 ,決定先裝個試試&#xff1b;可是這一路安裝差點整吐血&#xff0c;可能還是水平有限吧&#xff0c; 但還是想把這個過程分享出來&#xff0c;讓遇到同樣問題的同學有個小小的參考&#xff0c;好了言歸正傳&#xff01;&#xff01; <(~.~)> 下面是安裝流…

設計模式之代理模式(上) 靜態代理與JDK動態代理

2019獨角獸企業重金招聘Python工程師標準>>> 代理模式 給某一個對象提供一個代理&#xff0c;并由代理對象控制對原對象的引用。靜態代理 靜態代理是由我們編寫好的類&#xff0c;在程序運行之前就已經編譯好的的類&#xff0c;此時就叫靜態代理。 說理論還是比較懵…

mysql 分頁查詢

使用limit函數 limit關鍵字的用法&#xff1a; LIMIT [offset,] rows offset指定要返回的第一行的偏移量&#xff0c;rows第二個指定返回行的最大數目。初始行的偏移量是0(不是1)。轉載于:https://www.cnblogs.com/xping/p/6703986.html

WPF 實現更換主題色

WPF 實現更換主題色WPF 使用 WPFDevelopers.Minimal 如何更換主題色作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&a…

vue3與vue2的區別

先來說說當下市場開發使用的問題&#xff0c;目前2021年使用vue3開發的企業還是少&#xff0c;基本上都還是以vue2的形式進行開發&#xff0c;vue3的開發模式跟react很像&#xff0c;這時候有人就會想那我學vue3有用么&#xff0c;淦&#xff0c;他喵的&#xff0c;先別激動&am…

Spring Data REST API集成Springfox、Swagger

原文: Documenting a Spring Data REST API with Springfox and Swagger 使用Spring Date REST&#xff0c;你可以迅速為Spring Date repositories的創建REST API&#xff0c;并提供CRUD和更多功能。然而&#xff0c;在嚴謹的API開發過成功&#xff0c;您還希望擁有自動生成的最…

【系統設計】S3 對象存儲

在本文中&#xff0c;我們設計了一個類似于 Amazon Simple Storage Service (S3) 的對象存儲服務。S3 是 Amazon Web Services (AWS) 提供的一項服務&#xff0c; 它通過基于 RESTful API 的接口提供對象存儲。根據亞馬遜的報告&#xff0c;到 2021 年&#xff0c;有超過 100 萬…

轉: telnet命令學習

1.每天一個linux命令&#xff08;58&#xff09;&#xff1a;telnet命令 轉自&#xff1a; http://www.cnblogs.com/peida/archive/2013/03/13/2956992.html telnet命令通常用來遠程登錄。telnet程序是基于TELNET協議的遠程登錄客戶端程序。Telnet協議是TCP/IP協議族中的一員&a…

禪道、碼云、coding、redmine、jira、teambition幾大敏捷開發項目管理系統試用對比體驗

作為一個軟件公司的管理人員&#xff0c;在項目和人員多起來后&#xff0c;就需要通過系統來對項目和人員進行管理。 我們是典型的軟件外包公司&#xff0c;專為客戶定制軟件&#xff0c;所以我們的業務都是項目型的。因此&#xff0c;在管理模式上&#xff0c;我們就要用所謂…

Dubbo中的SPI機制

Dubbo中的SPI機制 概述 Service Provider Interface 即 SPI&#xff0c;是JDK內置的一種服務提供發現機制&#xff0c;可以用來啟用框架擴展和替換組件。可以讓不同的廠商針對統一接口編寫不同的實現 SPI實際上是“接口策略模式配置文件”實現的動態加載機制。在系統設計中&…

JWT:擁有我,即擁有權力

Hi&#xff0c;這里是桑小榆。上篇文章中&#xff0c;我們一起探討了 OAuth 協議的原理以及授權認證流程&#xff0c;本次我們一起探討 jwt 令牌作為授權協議的傳輸介質。OAuth協議規范了幾個參與角色的授權標準&#xff0c;安全可控的授予第三方應用&#xff0c;第三方應用獲取…

雙十一到來之前,阿里AI設計師“魯班”1天能做4000萬張海報

相比較去年&#xff0c;“魯班”的設計技藝有所提升。 人工智能很大程度上便利了我們的生活&#xff0c;現在他們甚至還能取代了一些設計師的工作&#xff0c;在雙十一正式到來之前&#xff0c;淘寶的宣傳已經鋪天蓋地&#xff0c;然而很多人都沒想到&#xff0c;我們打開淘寶…

Appium移動自動化測試之獲取appPackage和appActivity

方法一&#xff1a;直接打開Appium,點擊左上角機器人圖標 選擇apk所在位置&#xff0c;如圖所示&#xff0c;這里以ContactManager.apk為例 方法二&#xff1a;利用dex2jar和jd-gui這兩個工具反編譯apk文件 這里仍以ContactManager.apk為例 (1)重命名ContactManager.apk為Conta…

CAD轉WPF: 關于CAD圖紙文件轉換為WPF矢量代碼文件(xaml文件)的技巧

前言&#xff1a;下面的文章&#xff0c;我將會以幾個很簡單的步驟&#xff0c;來演示一下通過CAD圖紙轉換為XAML代碼文件的方法&#xff0c;供大佬們參考。一、為了演示一個簡單的操作&#xff0c;我此處先打開一個空白的CAD&#xff0c;等下用來進行繪制點內容使用。二、自定…

python之新式類與經典類

經典類與新式類經典類:P 或 P()--深度查找&#xff0c;向上查父節點新式類 :P(object)---廣度查找&#xff0c;繼承object&#xff0c;新式類的方法較多轉載于:https://www.cnblogs.com/zyy98877/p/8574983.html