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

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项目也是没办法直接使用的。

bcdb44a14dfc4a482fe53ab270294481.png

如果非abp的net 项目想调用abp vnext项目的方法应该怎么办呢?可能很多人会想到使用HttpClient来调用,类似于如下方式

伪代码
var client=new HttpClient();
...设置请求地址,请求路径、请求参数
var result=await client.SendAsync(requst);
...解析返回值等

这种方式使用起来非常的繁琐,很不好用。那有没有其他方式就像调用本地方法一样直观又方便的方式呢?

答案是有的,我们将使用NSwagStudio 来动态的生成客户端代码,使用客户端代码非abp的net项目就可以像调用本地方法一样方便的调用abp项目的方法。下载并安装NSwagStudio,安装成功后将后如下图

51bdfa564cb20b7c394da9251cca7a4b.png

准备测试的项目,通过abp官网在线创建一个项目名为AbpProject

897a0caf0e51fbefe568bdb1638dceb8.png

生成abp项目下载解压后在Application、Contract添加测试使用到的类
3c94869d8f8b691c6d15c4f4e4d0dae0.png

代码非常简单

b6d56511c0a64b94f8e7d79a248413f1.png

将AbpProject.HttpApi.Host设为启动项目,并启动项目

1155f8c8245d5e622481dd5ecb97672e.png

打开NSwagStudio,设置swagger.json地址,设置输出文件路径,点击"Generate Files"
57f05a1fcae867b101377bd939911def.png

我们将得到一个AbpProjectClient.cs文件

207ab9c879d3ea14b7f200a2e93965d4.png

接线来我们生成一个web api项目,并将AbpProjectClient.cs文件放入该项目:

3f12e28a620a2f35775e8c4c843f62a7.png

在控制器中添加测试方法,真正的使用时应该使用HttpClientFactory来创建HttpClinet。
0868e049180bd594fc714aadae1e90b9.png

运行web api项目,并通过swagger调用测试方法,测试成功。web api项目调用Abp项目的接口成功并拿到了返回结果,并且不用序列化就能直接使用返回结果。

af1a6aff83c8cdb29d6361da6212ad20.png

当然还可以使用其他方式来生成C#客户端,比如[NSwag.CodeGeneration.CSharp](https://www.nuget.org/packages/NSwag.CodeGeneration.CSharp/)、NSwag.MSBuild等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目中引入composer包

假如在云服务器上,项目根目录在 /data/shop,则 示例: cd /data/shop响应的结果可能会有两种: 1、第一种是直接require成功 示例: composer require haveyb/tiny-laravel #响应结果 ./composer.json has been created Loading …

圆的拟合

1.三点求圆心和半径 https://blog.csdn.net/liyuanbhu/article/details/52891868 2.最小二乘拟合圆转载于:https://www.cnblogs.com/yhlx125/p/9671641.html

printf()函数不能直接输出string类型

因为string不是c语言的内置数据&#xff0c;所以直接printf输出string类型的是办不到的。 要这样输出: printf("%s\n",a.c_str()); 举例: #include<bits/stdc.h> using namespace std; int main(){string a"人生";printf("%s\n",a.c_str()…

C#项目代码规范

目的 1.方便代码的交流和维护。 2.不影响编码的效率&#xff0c;不与大众习惯冲突。 3.使代码更美观、阅读更方便。 4.使代码的逻辑更清晰、更易于理解。 在C#中通常使用的两种编码方式如下 Camel(驼峰式)&#xff1a; 大小写形式&#xff0d;除了第一个单词&#xff0c;所有单…

.NET MAUI实战 FolderPicker

1.概要最近在迁移 GeneralUpdate.Tool的时候需要用到文件夹选择&#xff0c;在MAUI中可以使用FolderPicker进行选择。注意&#xff0c;和上篇文章的文件选择不一样。因为在.NET MAUI中目前还没有傻瓜式直接可用的FolderPicker供开发者使用所以需要自己动手做一些修改。完整示例…

h5外卖源码php_校园食堂外卖APP走红 更多APP定制开发上一品威客网

近日&#xff0c;西安一高校推出了一款校园食堂外卖APP走红网络。该APP涵盖学校食堂的所有饭菜&#xff0c;并可给该校的师生提供校园食堂饭菜外卖服务。饭菜价格与食堂统一&#xff0c;且仅供该校内的师生使用。 目前开发校园外卖订餐系统可谓是一个较热门的创业项目&#xff…

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)

程序设计的三种基本结构&#xff1a; 面向对象&#xff0c;面向过程&#xff0c;函数式编程1&#xff0c;什么是面向对象编程 面向对象编程是一种编程方式&#xff0c;此编程方式的落地需要使用 “类” 和 “对象” 来实现&#xff0c;所以&#xff0c;面向对象编程其实就是对 …

iPhone屏幕大小和适配建议(包括 XR XS XSM )

//4 ----:{{0, 0}, {320, 480}} //5、5s ----:{{0, 0}, {320, 568}} //6、6s、7、8 ----:{{0, 0}, {375, 667}} //6P、7P、8P ----:{{0, 0}, {414, 736}} 复制代码X 系列 //X ----:{{0, 0}, {375, 812}} //XR ----:{{0, 0}, {414, 896}} //XS ----:{{0, 0}, {375, 812}} //XSM …

go语言中的方法method

package main;import "fmt"//重新定义一个类型 //为该INT类型扩展方法 type INT int;type A struct {name string; }type B struct {name string; }func main() {a : A{};a.Print();//指针传递a.Print2();fmt.Println(a);//同上(*A).Print2(&a);b : B{};b.Print(…

微信自定义tabbar有小红点_自定义微信小程序tabBar组件上边框的颜色

背景&#xff1a;在微信小程序的实际开发过程中&#xff0c;有时候我们需要修改微信小程序提供的 tabBar 组件顶部边框的颜色&#xff0c;以满足项目需求解决方案&#xff1a;方式一&#xff1a;通过tabBar组件自带的 borderStyle 属性来控制边框的颜色&#xff0c;将边框的颜色…

又一批优质.NET6实战项目,面临永久下线...

多好的实战项目大家抓紧时间实操起来呀移动电商实战这次能上岸&#xff0c;最重要的是这个Vue3VantUI.NET6SqlSugar移动电商实战&#xff0c;全部都是最新最热的技术栈&#xff0c;写上简历后面试基本上都是问的这块儿内容。我先给大家看看项目的UI。项目UI全套实战源码这个电商…

laravel 配置微信公众号时{errcode:-106,errmsg:token check fail}

一、问题描述 做微信授权登录时&#xff0c;遇到的一个坑&#xff0c;提示配置失败&#xff0c;F12&#xff0c;响应为 errcode":-106,"errmsg":"token check fail 二、解决方案&#xff1a; 注&#xff1a;宗旨就是让微信能够访问你填写的网址&#xff…

电商企业怎样用好大数据

电商企业怎样用好大数据 大数据正在促生新的蓝海&#xff0c;催生新的经济增长点&#xff0c;正在成为政府和企业竞争的新焦点。2012年&#xff0c;瑞士达沃斯论坛发布《大数据&#xff0c;大影响》报告&#xff0c;称“数据已经成为一种新的经济资产类别&#xff0c;就像货币或…

ORACLE经常使用系统查询

&#xfeff;&#xfeff;1 查询系统全部对象 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS FROM DBA_OBJECTS WHERE OWNERUPPER(SCOTT) 2 查看系统全部表 SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES 3 查看全部用…

Safari 版本回退方法

回退条件 版本回退的前提是关闭电脑的SIP机制&#xff0c;命令行 csrutil status 检测状态。Mac os 10.14以下版本回退Safari后插件还是可以用的&#xff0c;升了新系统退了也没法用了。我的是旧系统 SIP关闭方法 1 重启MAC&#xff0c;按住cmdR直到屏幕上出现苹果的标志和进度…

同步方法 调用异步防范_Spring一个注解实现方法的异步调用,再也不用单开线程了...

介绍同步调用先来演示一下什么是同步调用测试方法输出如下doTaskOne start 1566121320372doTaskOne end 1566121321373doTaskTwo start 1566121321373doTaskTwo end 1566121322374可以看到方法一执行完毕&#xff0c;方法二才会执行异步调用不返回值1.Spring Boot启动类上加Ena…

使用docker搭建redis主从

一、构建 Docker 环境 1、创建 dockerfile FROM centos:latest RUN groupadd -r redis && useradd -r -g redis redis RUN yum -y update && yum -y install epel-release && yum -y install redis && yum -y install net-tools EXPOSE 63…

【源码探索】.NET中的List,是哪种数据结构

“当你提出疑问并开始思考时&#xff0c;答案就离你不远了”图片&#xff1a;奥森公园的向日葵 拍摄于2022年7月23日 摄影师&#xff1a;刘先生01—问题缘起严格来说应该是List<T>&#xff0c;因为.NET的核心基础类库中&#xff0c;并没有List&#xff0c;作为泛型类型的…

dpdk对虚拟化的支持调研

目录&#xff1a; 虚拟化dpdk的实现研究 virtiovhostSR-IOV热迁移相关研究拓展本文记录近期对dpdk在虚拟化和云计算领域应用的研究成果&#xff0c;内容梳理如下。 虚拟化 虚拟化&#xff0c;抽象来说&#xff0c;就是将物理资源逻辑化。具体来说&#xff0c;虚拟技术的实现是在…

服务器环境

一 linux 系统搭建Java项目环境 1 环境准备&#xff1a;jdk,tomcat, nginx,reids,mysql jdk:java环境 Tomcat&#xff1a;Java项目服务器 nginx&#xff1a;项目静态资源&#xff0c;域名解析&#xff08;ssl&#xff09; redis: 项目可能会用到 mysql: 数据库 环境转载于:htt…