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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM