環境: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/