为abp vnext生成C#客户端给非abp第三方net程序使用

当然也可以使用该方给普通web api项目生成客户端代码,供其他第三方应用来使用。

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.CSharpNSwag.MSBuild等。
源码地址:https://github.com/fisherLB/AbpProjectClient

posted @ 2022-10-09 17:57  fisherLB  阅读(87)  评论(0编辑  收藏  举报