封装WebAPI客户端,附赠Nuget打包上传VS拓展工具

一、前言

上篇《 WebAPI使用多个xml文件生成帮助文档 》有提到为什么会出现基于多个xml文件生成帮助文档的解决方案,因为定义的模型可能的用处有:

1:单元测试

2:其他项目引用(可能以Nuget包的形式)

3:WebAPI客户端(封装的HttpClient及WebAPI接口调用,其实包含在第2点内..)

要源码的可以直接拉到最下面,源码一如既往的还在那

二、为什么要封装WebAPI客户端

1:让WebAPI对于调用者来说“透明”,直接以引用程序集的方式。

2:统一项目内调用入口(当然了,非要绕过直接去请求接口肯定也是可以得,但是这是团队管理的问题)。

3:组合接口调用

4:版本化(通过Nuget,不论是自建还是Nuget.org)

三、封装的WebAPI客户端都包含些什么

这里继续使用 WebAPI2PostMan 项目来演示。

首先,因为将WebAPI的接口以HttpClient来进行封装,那至少需要定义出接口的请求路由,此处仅定义出了两处。

我们在解决方案新建一个类库项目,并将其命名为 WebAPI2PostMan.Client ,接着添加一个名为 WebApi2PostManStatic 的类

  1. using System.Configuration;
  2. namespace WebAPI2PostMan.Client
  3. {
  4. /// <summary>
  5. ///     WebApi2PostMan静态资源类
  6. /// </summary>
  7. public class WebApi2PostManStatic
  8. {
  9. /// <summary>
  10. ///     服务地址
  11. /// </summary>
  12. public static string ServiceUrl = ConfigurationManager.AppSettings["WebAPI2PostManServiceUrl"];
  13. /// <summary>
  14. ///     获取所有产品
  15. /// </summary>
  16. public static string RouteProductGetAll = "api/Product/All";
  17. /// <summary>
  18. ///     添加产品
  19. /// </summary>
  20. public static string RouteProductAdd = "api/Product/Add";
  21. }
  22. }

接口请求无非就是Http的那几个方法,但此处仅认为我们的接口只包含Get和Post两种Http请求方法。

基于此,我们定义出一个WebApiHelper类。

  1. /// <summary>
  2. ///     WebAPI帮助类
  3. /// </summary>
  4. public class WebApiHelper
  5. {
  6. public static T1 CallPostWebApi<T1, T2>(string url, T2 request, string serviceUrl, int? timeOut = 10)
  7. public static T1 CallGetWebApi<T1>(string url, string serviceUrl, int? timeOut = 10)
  8. public static List<TResponse> CallWebApiBatch<TRequest, TResponse>(HttpMethod method, string endpoint, List<TRequest> batchRequestModels, string url, string serviceUrl, int? timeOut = 10)
  9. public static async Task<T1> CallPostWebApiAsync<T1, T2>(string url, T2 request, string serviceUrl, int? timeOut = 10)
  10. public static async Task<T1> CallGetWebApiAsync<T1>(string url, string serviceUrl, int? timeOut = 10)
  11. public static async Task<List<TResponse>> CallWebApiBatchAsync<TRequest, TResponse>(HttpMethod method,string endpoint,List<TRequest> batchRequestModels,string url,string serviceUrl,int? timeOut=10)
  12. }

为了节省篇幅和便于观看,将实现都删去了,可以看到定义了6个方法,分为同步和异步一共三类,Get , Post ,Batch(批量接口,有感兴趣的就下篇讲讲)。

然后,再添加一个用于封装的类 WebApi2PostManClient。

  1. using System.Collections.Generic;
  2. using WebAPI2PostMan.WebModel;
  3. namespace WebAPI2PostMan.Client
  4. {
  5. /// <summary>
  6. ///     WebApi2PostMan 客户端
  7. /// </summary>
  8. public class WebApi2PostManClient
  9. {
  10. /// <summary>
  11. ///     获取所有产品
  12. /// </summary>
  13. /// <param name="timeout">超时时间</param>
  14. /// <returns>产品列表</returns>
  15. public static IEnumerable<Product> GetAllProduct(int? timeout = 10)
  16. {
  17. return WebApiHelper.CallGetWebApi<IEnumerable<Product>>(WebApi2PostManStatic.RouteProductGetAll,WebApi2PostManStatic.ServiceUrl,timeout);
  18. }
  19. /// <summary>
  20. ///     添加产品
  21. /// </summary>
  22. /// <param name="request">添加的产品</param>
  23. /// <param name="timeout">超时时间</param>
  24. /// <returns>添加结果</returns>
  25. public static string AddProduct(Product request,int? timeout = 10)
  26. {
  27. return WebApiHelper.CallPostWebApi<string, Product>(WebApi2PostManStatic.RouteProductAdd, request,WebApi2PostManStatic.ServiceUrl, timeout);
  28. }
  29. }
  30. }

四、使用Nuget包管理器来发布WebAPI2PostMan.Client

怎么搭建NugetServer就不赘述了,新建一个空的web项目接着程序包控制台输入

  1. PM> Install-Package NuGet.Server

然后该有的都会有了,直接发布到IIS即可。

此时,本地已经有一个NugetServer了,浏览如下。

右键项目 WebAPI2PostMan.Client => 属性 => 应用程序 => 程序集信息,补全一些信息。

运行命令行并定位到当前项目目录,执行

  1. nuget pack WebAPI2PostMan.Client.csproj -s http://localhost:88 123

此处的nuget是配的环境变量,也可以替换成( 路径/NuGet.exe ),若启用了 NuGet 程序包还原的话,解决方案目录下的文件夹.nuget内会有NuGet.exe及其配置。

http://localhost:88 即为server地址,此处切不可加/nuget,否则会报403. 后面是密码,默认没设置的话会有警告并提示使用nuget setApiKey 设置。

那么其实一直以来都是做一个批处理脚本来打包并上传我们的包。

或者是dudu很久以前发的《用Nuget管理好自家的包包i》以及 http://www.cnblogs.com/lzrabbit/tag/NuGet/ 讲的都很详细。

还有《将nuget与VS直接集成,实现一键上传等功能》,只不过是需要手动设置的。

为了不想这么麻烦,顺手写了一个VS的拓展工具 Push2NuGet 来简化这些操作。

首先在 工具=》拓展和更新=》联机=》Visual Studio库 =》输入 Push2NuGet 安装,重启解决方案。

因为是一口气写出来的,没想好 一些服务参数放哪,就暂时扔到.nuget文件夹下,因此,需要在.nuget文件夹下 新建一个NuGet.xml的文件并完善信息。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <SelfServer>
  3. <Url>http://localhost:88</Url>
  4. <ApiKey>123</ApiKey>
  5. </SelfServer>

然后右键项目点击【打包并上传】即可。

成功后显示。

新建一个 单元测试项目 WebAPI2PostMan.Tests 并在Nuget里设置Nuget源。

安装刚才上传的 WebAPI2PostMan.Client

添加两个单元测试方法

五、源码

示例源码:https://github.com/yanghongjie/WebAPI2PostMan

拓展工具:https://github.com/yanghongjie/Push2NugetServer

既然都看到这了,顺手评价再赏个推荐呗!

时间: 2024-10-27 12:54:20

封装WebAPI客户端,附赠Nuget打包上传VS拓展工具的相关文章

NuGet打包上传一条龙服务

昨天写了搭建自己的NuGet程序源,但是领导不满意之前的打包上传~~,无奈只能去爬点思路了,这里参考的其他博文,但是还是想写下来. 第一步.建立一个批处理文件 在文件里,有三条命令: nuget pack %1 -Build -Prop Configuration=Release -o D:\up_Personal\develop nuget push D:\up_Personal\develop\%~2.*.nupkg yourapikey -S http://yournugetsiite:1

nuget打包上传

准备工作 下载nuget.exe,以及gui推送编辑工具 Nuget Package Explorer (可选) 设置nuget环境变量. 流程 完成项目 cmd控制台cd到项目目录下(项目目录不是解决方案目录) 执行nuget spec 进行初始化 使用文本编辑工具或 GUI工具打开.spec文件,编辑包信息 执行nuget pack xxxx.csproj ,将dll进行打包 (可选)用GUI工具打开.nupkg包文件,检查信息并点击Publish推送 完成. 原文地址:https://ww

【Linux命令】--(4)文件打包上传和下载

文件打包上传和下载 +++++++++++++++++++++++++++++++用SecureCRT来上传和下载文件tar命令gzip命令+++++++++++++++++++++++++++++++先把计划放着,待老夫国庆把它学完!

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门:https://github.com/heyuan110/BashShell?spm=5176.100239.blogcont5028.4.kFcLtR 还有关于fir指令的一

如何将程序打包上传到Appstore

1.将程序打包上传到Appstore 一般项目开发完毕了,没有问题了就要上传到应用商店里了让苹果进行审核了,通过之后用户就可以下载了. 那么具体的一个步骤是怎么样的呢? 连上真机,在xcode7之后可以不用真机就可以调试了,但是没有证书是无法进行打包的!所以注意,xcode7虽然可以免证书真机调试,但是没有证书是无法打包! 1.选择归档,下图所示: 2.选中下面的红色部分. 3.第一个选项就是上传到应用商店中的. 选择下一步就可以了.然后就是等待了.上传完毕之后需要去开发者中心配置相关的信息.这

MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件02-多文件上传

上一篇中,使用客户端jJSAjaxFileUploader插件实现单文件异步上传,本篇实现多文件异步上传. 本篇源码在github,先看效果: ● 上传文件显示进度条. ● 停止上传按钮和关闭缩略图按钮. ● 限制上传文件的类型. ● 限制上传文件的尺寸. ●同时上传多个文件成功后显示缩略图.文件名: ● 点击界面上的删除按钮,界面删除,同步删除文件夹中文件. ● 再点击上传文件,界面追加一行新的缩略图.文件名.删除按钮: □ HomeController 把上传的文件名改成以GUID命名的格式

IOS 发布程序(打包上传)

? 发布程序的主要步骤 登录开发者主页 生成cer证书:cer是一个跟电脑相关联的证书文件,让电脑具备发布程序的功能 添加App ID:发布哪些app? 生成MobileProvision文件:结合2.3生成一个手机规定文件 导入cer.MobileProvision文件 填写应用信息 配置证书 打包上传程序 ? 最终会得到2个文件 ? Cer文件:让电脑具备发布程序的功能 ? MobileProvision文件:哪些app.哪台电脑需要发布程序? 发布程序的步骤01-登录开发者主页 ? 登录开

打包上传成功, itunes connect 不出现上传的版本

由于有一次感觉build setting 里 code signing identity设置证书有点乱,有些已经用不到了,就想把那些删除 于是我找到了所有证书的那个文件夹(进入所有证书的那个文件夹),结果脑袋抽筋把里面所有的证书都删除了.结果就悲剧了:我下载了发布证书,打包上传都没有问题,itunes connect 构建版本的时候死活不出现上传的版本.废话有点多... 1,进入xcode 的偏好设置(preferences)->Accounts->点击你的开发者帐号 双击效果图如下 2,点击

iOS 打包上传AppStore相关(1)-相关证书配置

最近一个老项目需要更新迭代,一个新的项目需要上线.有一些自己出现的BUG,也有一些没搞懂到处翻资料的问题.在此想做一个总结,写一下总体步骤,尽可能的详细一些,以及自己的一些理解.有很多步骤因为我们查阅的资料在作者可能无意间觉着是个小问题就跳过去了,然而给我们带来了许多麻烦.会将我遇到的问题都写出来,也会随时修改添加.感谢大家. 1.首先,我们需要一个苹果开发者的付费账号 https://developer.apple.com/ 去这个网站申请,至于$99或$299看你自己或公司的经济实力了.同时