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>

設定後,測試 http://localhost:53060/swagger 

2.使用NSwag Studio

下載安裝程式,裝完後,執行程式,輸入相關參數
    
  1. Runtime 若是.Net Framework選擇WinX86 or X64。
  2. 取得Json到本地端。
  3. 右方區塊為產生C# Client相關的設定,還多的,這裡列出幾個符合我需求的調整。
    • Namespace : 指定命名空間。
    • Generate exception Class : 產生ApiException類別。
    • Inject HttpClient : 這邊我取消,待會透過指定BaseClass及CreateHttpClientAsync取得。
    • Base Classs Name: 父類別名稱,此類別需自行實作。
    • Call the CreateHttpClientAsync : 是否呼叫此方法來設定HttpClient,此方法需在BaseClass實作。
    • Output file path: 輸出的檔案名稱,必填,否則不會產生檔案。
      • 只會產生一個檔案,無法多檔案。

產生後的部份程式



相關參考

這個網誌中的熱門文章

[TFS] 分支與合併