NSwag Studio 產生API的Client介接程式碼
前言
一直以來在寫Web API時,給同事參考都是透過Swagger產生的說明文件。如下圖使用Swashbuckle 套件產生。
專案環境
- .Net Framework 4.8
- ASP.NET Web API 2
- ASP.NET MVC
- 跟API 取資料,作展示。
問題
同事詢問是否可以直接提供介接類別,讓他直接可以使用。例如:Google API SDK。這...若要手刻的話,可能會累屬偶,幸好科技發達,關於這方面,早已有相關的解決方法。
如何使用
1. Web API 安裝NSwag
安裝Nuget package
- NSwag.AspNet.Owin
- Microsoft.AspNet.WebApi.Owin
- Microsoft.Owin.Host.SystemWeb
ps: 關於為什麼不用Swashbuckle,請參考此篇。
在Web API專案新增Startup.cs
[assembly: OwinStartup(typeof(NSwagLab.Startup))]
namespace NSwagLab
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
app.UseSwaggerUi3(typeof(Startup).Assembly, settings =>
{
//針對RPC-Style WebAPI,指定路由包含Action名稱
settings.GeneratorSettings.DefaultUrlTemplate =
"api/{controller}/{action}/{id?}";
//可加入客製化調整邏輯
settings.PostProcess = document =>
{
document.Info.Title = "WebAPI 範例";
};
});
}
}
}
Web.config 新增handler
<system.webServer>
...
<handlers>
...
<add name="NSwag" path="swagger" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
2.使用NSwag Studio
下載安裝程式,裝完後,執行程式,輸入相關參數
- Runtime 若是.Net Framework選擇WinX86 or X64。
- 輸入文件的json網址:http://localhost:63999/swagger/v1/swagger.json
- 取得Json到本地端。
- 右方區塊為產生C# Client相關的設定,還多的,這裡列出幾個符合我需求的調整。
- Namespace : 指定命名空間。
- Generate exception Class : 產生ApiException類別。
- Inject HttpClient : 這邊我取消,待會透過指定BaseClass及CreateHttpClientAsync取得。
- Base Classs Name: 父類別名稱,此類別需自行實作。
- Call the CreateHttpClientAsync : 是否呼叫此方法來設定HttpClient,此方法需在BaseClass實作。
- Output file path: 輸出的檔案名稱,必填,否則不會產生檔案。
- 只會產生一個檔案,無法多檔案。
產生後的部份程式
相關參考