简介

对于.net来说,用web api来构建服务是一个不错的选择,都是http请求,调用简单,但是如果真的要在程序中调用,则还有些工作要做,比如我们需要手写httpClient调用,并映射Model, 如果服务少还可以,多了就繁琐了。

Swagger

关于Swagger的信息,其他博客已经有介绍,这里就不多说。 大家可以参考http://chuansong.me/n/322685748559 ,使用Swagger后,可以解决服务没有文档或者文档和服务不同步的问题,同时Swagger自带的就有模拟请求的功能,所以可以在页面上直接测试接口。 这些不仅对开发,对测试同学也是友好的。 
下面是一个简单的Web API,添加注释
 
引用swagger后,访问http://XXX/swagger/ui/index(XXX为你的域名),结果如下,可以看到页面上会显示你的服务,以及服务的描述。
 
 点击具体某个服务,你可以看到你定义的参数,并可以直接在页面上发起测试。 

AutoRest

有了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

Swagger+AutoRest 生成web api客户端(.Net)的更多相关文章

  1. 利用Swashbuckle生成Web API Help Pages

    利用Swashbuckle生成Web API Help Pages 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: ...

  2. 利用Swashbuckle生成Web API Help Pages

    利用Swashbuckle生成Web API Help Pages 本文将通过Swagger的.NET Core的实现封装工具Swashbuckle来生成上一篇-<创建ASP.NET Core ...

  3. 【ASP.NET Web API教程】3 Web API客户端

    原文:[ASP.NET Web API教程]3 Web API客户端 Chapter 3: Web API Clients 第3章 Web API客户端 本文引自:http://www.asp.net ...

  4. 关于ASP.NET Web API 客户端的请求报文中添加 Authorization

    当你使用客户端发送请求 Web API 的时候,因为API 有验证,所以你的请求报文中必须有”Authorization“,那么就需要手动添加了! HttpClient client = new Ht ...

  5. asp.net web api客户端调用

    服务接口 接口1: //Post:http://127.0.0.1/HY_WebApi/api/V2/Key/FunctionTest1 [HttpPost] public HttpResponseM ...

  6. 自动生成web api接口文档

    然后打开web程序,访问ip:port/Help. 为什么可以直接输入Help就能访问呢,因为这个插件本身已经配置了路径,如下. public class HelpPageAreaRegistrati ...

  7. Swagger+AutoRest

    Swagger+AutoRest 生成web api客户端(.Net)   简介 对于.net来说,用web api来构建服务是一个不错的选择,都是http请求,调用简单,但是如果真的要在程序中调用, ...

  8. 在ASP.NET Core Web API上使用Swagger提供API文档

    我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...

  9. Core Web API上使用Swagger提供API文档

    在ASP.NET Core Web API上使用Swagger提供API文档   我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...

随机推荐

  1. <td></td>标签的border 样式在浏览器中显示不出来

    问题: 在一些浏览器中比如360浏览器的兼容模式下, <td style="border:1px solid red;"></td> 标签 中 的内容为空时 ...

  2. 修改NavigationBarItem的字体大小和颜色的使用方法

    //创建一个左边按钮 UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"<" st ...

  3. android中的回调请求的个人理解

    Fragment类提供了管理"选项菜单"的回调函数onCreateOptionMenu(Menu,MenuInflater),调用它可以--创建"选项菜单". ...

  4. IOS开发基础知识--碎片18

    1:initWithFrame方法的理解 . initWithFrame方法是什么? initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸). 当然,其他UI对 ...

  5. 开发至今,终于开始测试bug,可以省心点了

    今天遇到一个特别奇葩的问题 IOSSDK9.1 Xcode7.1.1 使用表控制器UITableViewController来刷新表时, 之前对表的frame进行的修改,都会被恢复,沾满整个屏幕. 目 ...

  6. WebBrowser的Cookie操作之流量刷新机

    最近一直在思考着如何通过代码去伪装或实现人工自然浏览网页的效果,起初能想到的是用WebBrowser实现这一效果,需要达到的功能预想有以下几点: 1.自动刷新 2.模拟人工下拉滚动条并停留一段时间: ...

  7. Nagios学习实践系列——配置研究[监控当前服务器]

    其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...

  8. WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid

    WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid 故事背景: 需要检索某目录下文件,并列出来,提供选择和其他功能. 第一版需求: 列出文件供选择即可,代码如下 ...

  9. JavaScript的写类方式(6)

    时间到了2015年6月18日,ES6正式发布了,到了ES6,前面的各种模拟类写法都可以丢掉了,它带来了关键字 class,extends,super. ES6的写类方式 // 定义类 Person c ...

  10. C#学习笔记-数据的传递(公共变量)以及Dictionary

    看的代码越多,写的代码越多,就越是享受这些字符,终于渐渐懂得了那种传闻中的成就感,特别是自己从看不懂然后一步一步学,一个代码一个代码地敲,最后哪怕只是完成了一个小功能,也都是特别自豪的!这种自豪不用告 ...