abp vnext提供了動態C#API客戶端和靜態C#API客戶端來調用abp項目的接口,但是有局限性;要使用動態C#API客戶端的項目必須也是ABP vnext的項目。靜態C#API客戶端也依賴abp的包,如下圖為的靜態客戶端依賴于 Volo.Abp.DependencyInjection、Volo.Abp.Http.Client.ClientProxying等abp包,普通的net web api項目也是沒辦法直接使用的。
如果非abp的net 項目想調用abp vnext項目的方法應該怎么辦呢?可能很多人會想到使用HttpClient來調用,類似于如下方式
偽代碼
var client=new HttpClient();
...設置請求地址,請求路徑、請求參數
var result=await client.SendAsync(requst);
...解析返回值等
這種方式使用起來非常的繁瑣,很不好用。那有沒有其他方式就像調用本地方法一樣直觀又方便的方式呢?
答案是有的,我們將使用NSwagStudio 來動態的生成客戶端代碼,使用客戶端代碼非abp的net項目就可以像調用本地方法一樣方便的調用abp項目的方法。下載并安裝NSwagStudio,安裝成功后將后如下圖
準備測試的項目,通過abp官網在線創建一個項目名為AbpProject
生成abp項目下載解壓后在Application、Contract添加測試使用到的類
代碼非常簡單
將AbpProject.HttpApi.Host設為啟動項目,并啟動項目
打開NSwagStudio,設置swagger.json地址,設置輸出文件路徑,點擊"Generate Files"
我們將得到一個AbpProjectClient.cs文件
接線來我們生成一個web api項目,并將AbpProjectClient.cs文件放入該項目:
在控制器中添加測試方法,真正的使用時應該使用HttpClientFactory來創建HttpClinet。
運行web api項目,并通過swagger調用測試方法,測試成功。web api項目調用Abp項目的接口成功并拿到了返回結果,并且不用序列化就能直接使用返回結果。
當然還可以使用其他方式來生成C#客戶端,比如[NSwag.CodeGeneration.CSharp](https://www.nuget.org/packages/NSwag.CodeGeneration.CSharp/)、NSwag.MSBuild等。