1. 程式人生 > WINDOWS開發 >asp.net.core學習筆記1:swagger的使用和webapi接收Jobject物件

asp.net.core學習筆記1:swagger的使用和webapi接收Jobject物件

  環境:asp.net.core 3.1 (一覺醒來官方已經不推薦3.0了,於是沒有任何core經驗,也只能開始了3.1的開發學習)

  由於現有專案前後端分離、微服務化日趨流行,所以上手不採用web應用(razor頁面,mvc),直接使用webapi,也許後續的專案會採用SignalR做實時資料。迴歸正題,使用webapi常用的輔助工具swagger必須有姓名,好處就不說了,誰用誰知道。

  一、swagger的使用。網上相關教程(包括漢化等)較多,只簡述基本步驟,提供一些小技巧應用。

1.在nuget管理器中新增Swashbuckle.AspNetCore包引用;

  2.新增service配置。在startup.cs中在ConfigureServices方法中新增swagger的服務配置程式碼。注意配置xml的路徑和名稱,需要在專案屬性“生成”中配置名稱和地址。

1  services.AddSwaggerGen(c=> {
2                 c.SwaggerDoc("v1",new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My API",Version = "v1" });
3                 c.IncludeXmlComments(System.IO.Path.Combine(System.AppContext.BaseDirectory,"API.xml"));
4             });

技術分享圖片

  3.新增swagger配置。在startup.cs中Configure中新增程式碼配置應用程式。swagger的endpoint常規配置即可。

小技巧:將swagger的路由字首置為空,並將除錯的啟動路徑設定為index.html。由於是前後端分離,後端服務中不提供介面,設定為index.html為啟動路徑,可以在除錯的第一時間開啟swagger介面。

1         app.UseSwagger();
2             app.UseSwaggerUI(c =>
3             {
4                 c.SwaggerEndpoint("/swagger/v1/swagger.json","My API V1");
5                 c.RoutePrefix = ""
; 6 });

技術分享圖片

  二、Webapi接收jobject物件。json在api中的使用非常常見,但是core在api的請求中是不支援弱型別物件的,可以確定的是支援自定義型別和基礎資料型別。通常使用post傳送一個json,如果json是api已經定義好的強型別,那麼core可以將json直接反序列化成自定義型別。但如果json的內容不固定,或不便於定義強型別,我們通常選擇是弱型別jobject,但是很遺憾的是3.0之前是不支援json反序列化jobject的。(3.0之前的core通常自定義一個模型繫結構建器和模型繫結方法,參考資料3)

3.0之後添加了對jobject的優化支援,引用包 Microsoft.AspNetCore.Mvc.Newtonsoft,並在配置服務的時候對controller新增json的支援即可,如下:

  services.AddControllers().AddNewtonsoftJson();

  然後便可以在controll中新增post的api。

技術分享圖片

技術分享圖片

技術分享圖片

有興趣的同志可以研究參考資料3,看看core1.1是如何實現模型繫結的(實踐過程中有瑕疵,不建議採用這種古早的方法)。

參考資料:

1.https://lbadri.wordpress.com/2014/11/23/web-api-model-binding-in-asp-net-mvc-6-asp-net-5/

2.https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-3.1&tabs=visual-studio

3.https://www.cnblogs.com/showmu/p/6264950.html