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等。