Swagger+AutoRest 生成web api客户端(.Net)

对于.net来说,用web api来构建服务是一个不错的选择,都是http请求,调用简单,但是如果真的要在程序中调用,则还有些工作要做,比如我们需要手写httpClient调用,并映射Model, 如果服务少还可以,多了就繁琐了。
关于Swagger的信息,其他博客已经有介绍,这里就不多说。 大家可以参考http://chuansong.me/n/322685748559 ,使用Swagger后,可以解决服务没有文档或者文档和服务不同步的问题,同时Swagger自带的就有模拟请求的功能,所以可以在页面上直接测试接口。 这些不仅对开发,对测试同学也是友好的。 
下面是一个简单的Web API,添加注释
引用swagger后,访问http://XXX/swagger/ui/index(XXX为你的域名),结果如下,可以看到页面上会显示你的服务,以及服务的描述。
点击具体某个服务,你可以看到你定义的参数,并可以直接在页面上发起测试。 
有了Swagger后,方便查看服务,接下来就是如何调用服务,过往我们通常会写一个HttpUtils的类,里面包含SendGet,SendPost两个方法,如果是简单参数还好,但是如果Get请求返回一个对象,或者Post的时候需要发送一个对象,则需要手写这些类进行封装。 这里介绍一个组件:AutoRest (https://github.com/Azure/AutoRest), 简单来说,就是一个EXE工具,可以根据Swagger的结构生成服务的客户端,这个客户端可以让你像调用本地方法一样调用服务,方法内部包装了Http请求。 
在Swagger页面,你可以点击Explore按钮,通过浏览器可以看到这里返回了一个Json字符串,页面也是根据这个字符串进行的渲染,AutoRest也是根据这个结构来生成调用类。
选择Nuget,下载AutoRest
在solution下面找到pageage文件夹,目录如下:
在命令行里面打开 ,输入如下 AutoRest.exe -CodeGenerator CSharp -Modeler Swagger -Input http://XXX/swagger/docs/v1 -Namespace UserServiceClient, 其中Input的参数就是Swagger的Json地址,具体参数含义可以查看文档。 
执行成功后,在当前目录下会生成一个Generated目录
打开文件如下:
新建一个控制台程序,将整个文件夹copy到控制台程序下,文件夹名称可以随意定义。
同时控制台程序需要在Nuget中引用一个Client. 
写代码,调用,同时支持同步接口和异步接口。 
至此,全部完成。 
1. 以上这种方式,可以由服务端的同学完成,然后将生成的代码,简单修改后,编译发布到公司内nuget上,其他同学可以直接到公司内nuget下载
2. 服务端同学可以只集成Swagger,然后其他同学如果要用,可以通过工具生成。 
3. 以上仅是公司再未使用RPC前,方便服务调用的一种方式。 后面我会介绍一些.Net下的其他的服务调用方式,比如Hession,serverstack

转载于:https://www.cnblogs.com/beyondbit/p/5957124.html

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

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

相关文章

抽象方法和抽象类

抽象方法: 1、从上面的例子中我们可以看到抽象方法跟普通方法是有区别的,它没有自己的主体(没有{}包起来的 业务逻辑),跟接口中的方法有点类似。所以我们没法直接调用抽象方法 2、抽象方法不能用private修饰&#xf…

adb logcat 保存_保存的logcat在Android设备上的文本文件

I had found some crashes while running the application in android device, which is not showing in emulator. So i need to save the Logcat in a text file in my devices memory or SD card. Could you please suggest me good method to do this?解决方案adb shell l…

电脑技巧:六款Mac电脑上值得推荐的看图软件

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

C#用Zlib压缩或解压缩字节数组

/// <summary>/// 复制流/// </summary>/// <param name"input">原始流</param>/// <param name"output">目标流</param>public static void CopyStream(System.IO.Stream input, System.IO.Stream output){byte[] bu…

Git的smart Checkout\force checkout\Don‘t Checkout的区别

我们在develop分支修改了代码,但是没有commit,所以在切换到其他分支的时候回弹出这个窗口. smart checkout就会把冲突的这部分内容带到目的分支&#xff08;如果你没有点进窗口的那些文件处理冲突的话&#xff09; force checkout就不会把冲突的这部分内容带到目的分支 dont ch…

软件:推荐5款职场人必备的效率神器APP

目录 1.番茄TO DO&#xff08;支持Android、ios端下载&#xff09; 2.块时间 &#xff08;支持Android、ios端下载&#xff09; 3.滴答清单&#xff08;支持Android、ios端、PC端下载&#xff09; 4.Eventai&#xff08;仅ios端下载&#xff09; 5.Ihour&#xff08;支持Androi…

python滚动文本框_调整滚动Tkinter文本框的大小

我想要一个滚动的Tkinter文本框来填充最大的分配空间。我有点工作。。。在由于某些原因&#xff0c;当我拉伸窗口时&#xff0c;文本小部件很好&#xff1b;但是&#xff0c;滚动条在x轴上有大量的填充。在第二个问题是当我缩小窗口时&#xff0c;屏幕上的滚动条消失了。在有人…

深入理解 KVC\KVO 实现机制 — KVC

KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing&#xff0c;所以本来想放在一起讲的。但是篇幅有限所以就分成了两篇博文 KVO实现机制传送门 KVC概述 KVC是Key Value Coding的简称。它是一种可以通过字符串的名字&#xff08;key&#xff09;来访问类属性的机制。而不…

python中字典和集合对象是无序的_Python基础(四):元组、字典和集合

基础学习第四弹&#xff0c;常用对象&#xff1a;元组、字典和集合一、元组1.1 元组的应用场景思考&#xff1a;如果想要存储多个数据&#xff0c;但是这些数据是不能修改的数据&#xff0c;怎么做&#xff1f;答&#xff1a;列表&#xff1f;列表可以一次性存储多个数据&#…

Windows常用必备软件整理,太全了,值得收藏

目录 1、Office系列 2、杀毒软件 3、视频播放和视频处理 4、音乐播放 5、压缩解压 6、输入法 7、PDF阅读软件 8、文件加密 9、网盘 10、社交聊天 11、日常办公软件 ‍12、图片/照片处理‍ 13、系统自带的工具 Windows常用必备软件整理&#xff0c;太全了&#xff0c;值得收藏&…

常见的 Error 和 Exception

如下是常见的 Error 和 Exception&#xff1a; 1&#xff09;运行时异常&#xff08;RuntimeException&#xff09;也称 【非检查型异常 UncheckedException】&#xff1a; Nullpointer Exception&#xff1a;空指针异常&#xff1b;ClassCastException&#xff1a;类型强制转…

Datatable/Dataset 转 JSON方法

当数据库表的数据在一般处理程序中查出来需要将这个表数据返回到前台的jquery中&#xff0c;需要将数据拼成json字符串形式&#xff0c;这里是将数据库数据查出放在Datatable中&#xff0c;然后在一般处理程序中将datatable转成json的几个方法&#xff0c;根据不同的情况调用不…

数据库:SQLServer数据库备份方式介绍

今天小编给大家梳理一下数据库备份的相关知识&#xff0c;希望对大家能有所帮助&#xff01;1、完整备份完整备份相当于针对整个数据库备份&#xff0c;包含数据库的全部内容。数据库完整备份可以将数据库的所有内容备份为一个.Bak文件。后续可以通过该备份文件在本机或者拷贝到…

注入双括号报错注入_SQL手动注入:sqlilabs(less110)

种一棵树最好的时间是10年前&#xff0c;其次是现在。忘了是谁前言说实话&#xff0c;由于前段时间学 python &#xff0c;对于 OWASP TOP10 漏洞的学习都有所落下&#xff0c;虽然现在也在慢慢复习当中&#xff0c;但是今晚谈及的 SQL 注入漏洞手动注入和自动化(sqlmap)注入的…

try、catch、finally用法总结

一、异常的处理&#xff1a;抓抛模型过程一&#xff1a;"抛"&#xff1a;程序在正常执行的过程中&#xff0c;一旦出现异常&#xff0c;就会在异常代码处生成一个对应异常类的对象。并将此对象抛出。一旦抛出对象以后&#xff0c;其后的代码就不再执行。关于异常对象…

markdown学习/mou

markdown编辑器mou markdown编辑器的使用很简单&#xff0c;mac平台选择课 MOU 这款比较轻的客户端。 使用也很方便&#xff0c;打开软件&#xff0c;->helo->mou help 就有各种示例&#xff0c;照葫芦画瓢。 有些关键字需要转义,使用的时候要注意&#xff0c;比如插入一…

硬件知识:内存条出现故障的解决方案!

“电脑不时的突然出现蓝屏”&#xff0c;“开机之后毫无规律的死机”&#xff0c;“开不了机&#xff0c;一开机就出现嘶鸣声”&#xff0c;如果你的电脑出现了以上情况&#xff0c;就是你的内存兼容性出了问题&#xff0c;那么这种故障该如何解决呢&#xff1f;下面&#xff0…

api zabbix 拓扑图 获取_zabbix网络拓扑图配置-Maps(示例代码)

zabbix network map”可以简单的理解为动态网络拓扑图&#xff0c;可以针对业务来配置zabbix map&#xff0c;通过map可以了解应用的整体状况&#xff1a;服务器是否异常、网络是否有故障、应用当前什么状态。如果你不需要这些东西&#xff0c;至少你可以通过network map绘制一…

.NET 面试题(2)

61、Application 、Cookie和 Session 两种会话有什么不同&#xff1f; 1.Application 储存在服务端&#xff0c;没有时间限制&#xff0c;服务器关闭即销毁&#xff08;前提是自己没写销毁方法&#xff09; 2.Session 储存在服务端&#xff0c;客户端&#xff08;浏览器&#x…

盘点程序员必备的专业术语,值得看一看

英文缩写 API 应用程序接口&#xff08;英语&#xff1a;Application Programming Interface&#xff0c;简称&#xff1a;API&#xff09;&#xff0c;又称为应用编程接口&#xff0c;就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大&#xff0c;常常需要把…