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/