【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)

目前最新的代码已经通过Sqlite + NHibernate + Autofac满足了我们基本的Demo需求.

按照既定的要求,我们的API会提供给众多的客户端使用, 这些客户端可以是各种Web站点, APP, 或者是WinForm, WPF, Silverlight等诸如此类的应用,将来还有可能是各种Iot等物联网设备的应用,Restful API凭借其诸多优势,已经在移动互联网的时代火了一把,在接下来物联网的时代会发展的更好。

下图是一个简单的示意图,我们本章的ApiClient将提供一套固定的模式,辅助客户端来访问我们前面几章建立的API.

image

 

基本的HTTP传输

我们在实际的项目中是定义了一个ApiClient的静态类库,其通过HttpClient 再配合 Microsoft.AspNet.WebApi.Client类库,专门根据我们前面写的API做了更进一步的封装.

 

APIClient

我们先来看一下他提供的方法签名

image

 

Get/Post

顾名思义,这两个用来完成常见的HttpGet/HttpPost, 只是Post的方法中多了一个Object 的postData参数,这个就是用来发送我们要Post到API端的数据.

 

Execute

是Get,Post使用的基础方法, Get/Post的操作都是通过他完成的操作.

参数说明:

apiUrl: api的host地址

methodName: api的方法路径

query: 查询条件的组合, 通常对应URL中queryString部分, 也就是URL中问号后面的部分

method: 要使用的httpMethod, 这里支持 Get,Post,Put,Delete四种,

postData: post/put时,要传到api端的数据, 通常已一个object, 发送之前会通过Json.Net序列化为json.

useEndpointPrefix: 这个是指我们API的url 通常都有一个约定,就是在url的host部分后面加上api/作为开始,所以这是说url是否使用默认的这个习惯, 比如 http://xxx.com/api/xxxx

 

UploadFiles/DownloadFile

这两个从名字也可以和容易的看出来,我们如何通过我们的api上传跟下载文件,这个常用的场景有 通过app更新头像,或者从api端导出某个文件.

 

下面示例URL说明了我们上面参数中所对应的URL的部分

image

Query对象介绍

上面除了Query对象之外,其他的都容易理解, 在没有Query对象的时候,我们要拼出 URL的参数部分,我们通常会需要string来拼接,更好一点的办法是定义一个Dictionary来做自动连接, 这里我们为了更方便,

我们定义了一个Query对象,说到这里大家应该明白Query对象就是为了帮我们自动处理url的参数部分, 其核心基类是CoreQuery。

这里我们看几个内置的Query

LoginQuery

其提供了我们Login接口必要的参数, 在使用的时候我们可以直接new 一个loginQuery, 传入api调用的方法.

image

 

SessionQuery

这个是我们需要授权的APi需要传入sessionKey参数,通常我们的BaseController里面会设计一个SessionQuery, 当发起 Api Request请求的时候,都会附上这个SessionQuery, 他会自动在API的url中附加sessionKey=xxx的参数

复制代码
public class SessionQuery : CoreQuery{[Query(Name = "sessionKey")]public string SessionKey { get; set; }public SessionQuery(){}public SessionQuery(SessionQuery query){this.SessionKey = query.SessionKey;}}
复制代码

 

ListQuery:

可以从下面参数看到是用来处理分页的请求的.

image

 

CoreQuery.ParmsObj属性

除了常规的参数需要通过自定义单独的Query对象之外,对于一些很简单的APi, 如果我们需要对每个API接口都创建一个Query那岂不是很麻烦?

针对这个问题,我们想出了通过匿名对象来解决这个问题, CoreQuery下面有一个ParmsObj属性, 在使用的时候可以通过

image

这种方式来动态的添加url参数,这样会大大减少我们定义的Query类的数量.

 

来张WebApiClient的类库全图

image

这个WebApiClient可以很好的在Mvc, Winform等.NET项目中使用, 帮助你的客户端应用快速接入你开发的API.

 

本章代码: https://code.csdn.net/ODotNet/odn-webapiclient/tree/master

同时已发布到 Nuget, 大家可以通过 Install-Package Odn.WebApiClient 来添加到项目中引用

PM> Install-Package Odn.WebApiClient

 

在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的逻辑呢? 【WEB API项目实战干货系列】教你一步步教你解决方案.


文章转载出自 :  http://www.cnblogs.com/Flyear/p/4907323.html

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

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

相关文章

基于 Roslyn 实现代码动态编译

基于 Roslyn 实现代码动态编译Intro之前做的一个数据库小工具可以支持根据 Model 代码文件生成创建表的 sql 语句,原来是基于 CodeDom 实现的,后来改成使用基于 Roslyn 去做了。实现的原理在于编译选择的Model 文件生成一个程序集,再从这个程…

【GIS风暴】GIS拓扑关系原理详解

目 录 1. 拓扑关系的概念2. 拓扑元素3. 拓扑关系4. 拓扑关系的意义5. 拓扑在ArcGIS中实现1. 拓扑关系的概念 地图上的拓扑关系是指图形在保持连续状态下的变形(缩放、旋转和拉伸等),但图形关系不变的性质。 2. 拓扑元素 对二维而言,矢量数据可抽象为点(节点)、线(链、…

Android之简单的文件夹选择器实现

1、效果爆照 2、代码实现 前提需要保证app有读写权限 activity_select_folder.xml文件如下 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layo…

【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照

目录 【iVX 初级工程师培训教程 10篇文拿证】01 了解 iVX 完成新年贺卡 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏 【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照 【iV…

360极速浏览器使用postman

步骤如下&#xff1a;1、将crx文件打包成zip文件2、解压打包的zip文件&#xff0c;并将_metadata文件夹修改为metadata3、打开360浏览器的扩展4、360浏览器加载postman插件5、创建快捷方式6、双击快捷方式打开postman下载地址&#xff1a;http://pan.baidu.com/s/1c1ZX8XE如果网…

centos 下安装man手册

安装centos minimal版本&#xff0c;发现没有man手册 需要安装一下&#xff0c;yum install man-pages 本文转自 XDATAPLUS 51CTO博客&#xff0c;原文链接:http://blog.51cto.com/xdataplus/1796126

# javascript 总结

# javascript 总结 ## 语法1. 区分大小写2. 命名规范1. 首字母必须是 字母 _ $2. 其他字符可以是 数字 字母 下划线 $3. 避开系统的关键字4. 单词和单词连接方式推荐驼峰命名3. 注释1. 单行注释 //注释的内容2. 多行注释 /*注释内容*/4. 语句1. 要用;结尾(推荐做法)2. 如果不写…

聊聊 C++ 和 C# 中的 lambda 玩法

这几天在看 C 的 lambda 表达式&#xff0c;挺有意思&#xff0c;这个标准是在 C11标准 加进去的&#xff0c;也就是 2011 年&#xff0c;相比 C# 2007 还晚了个 4 年&#xff0c; Lambda 这东西非常好用&#xff0c;会上瘾&#xff0c;今天我们简单聊一聊。一&#xff1a;语法…

Android之网络请求通过协程+okhttp的没有做网络异常处理导致程序奔溃问题

1 问题 app里面的网络请求是通过协程+okhttp来实现的,但是没有做网络异常处理(域名无法解析、502错误等等一系列),导致程序奔溃 2 尝试 因为app基本上做好了,外面有大几十个地方调用,然后又有不同的作用域,调用的地方太多了,一开始修改在最外出的网络请求地方直接加上…

Windows10系统重装后必不可少的优化步骤

1. 查看系统的激活状态 Win+R,打开运行,输入slmgr.vbs -xpr,回车! 可以看到,该系统没有永久激活,即将过期,过期后部分功能会不可使用,需要重新激活。 2. 彻底关掉Windows Defender 方法一: 打开“命令提示符(管理员)”,然后输入: reg add "HKEY_LOCAL_MA…

【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏

目录 【iVX 初级工程师培训教程 10篇文拿证】01 了解 iVX 完成新年贺卡 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏 【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照 【iV…

visual studio系列(vs)启动调试网站使用ip+端口局域网访问

vs系列工具创建web应用时会自动创建一些配置文件&#xff0c;本文章讲的是如何修改配置文件&#xff0c;使vs在启动运行调试情况下 使用ip端口形式在局域网访问。本文章使用的是vs2015&#xff0c;.net 4.5。步骤如下&#xff1a;1.使用vs创建好你的web应用&#xff0c;打开项目…

Android studio之编译提示Could not find :umeng-asms-v1.2.1:.

1 、问题 Could not determine the dependencies of task :app:compileDebugJavaWithJavac. > Could not resolve all task dependencies for configuration :app:debugCompileClasspath.> Could not find :umeng-asms-v1.2.1:.Required by:project :app> Could not …

1-100之间的奇数

#include "stdio.h" int main() {int i0;for(i1;i<100;i){if(i%21){printf("%d ",i);}}return 0; }转载于:https://blog.51cto.com/zhangxinbei/1718010

计算机与操作系统基础小结

计算机基础概念 1946年二月美国&#xff0c;世界上第一台电子计算机ENIAC诞生&#xff0c;似乎从这一年开始世界便逐渐变得不一样了。随着半个世纪的时间&#xff0c;计算机技术蓬勃发展&#xff0c;推动人类进入信息社会。 计算机操作界面&#xff1a; ①图形用户界面 ②命令行…

WPF效果第一百八十九篇之又玩Expander+ListBox

上一篇文章已经提前预告了今天要分享的效果,今天接着上一篇的效果接着去实现,还是先来看最终实现的效果:1、关于简单的布局设计:总结&#xff1a;①③是Expander②④⑤⑥是ListBox2、把上一篇的②这一块用ListBox替换:<Expander Grid.Column"1" ExpandDirection&q…

作为一个甘肃天水人,我对罐罐茶有一种特殊的情怀

作为一个出生在罐罐茶世家的80后乡土人&#xff0c;经历了罐罐茶的发展演变历史&#xff0c;与罐罐茶结下了不解情缘&#xff0c;下面我就跟大家分享一下刘一哥与罐罐茶的故事吧。 久违的罐罐茶.mp4美丽邂逅 我最早接触罐罐茶应该是90年代&#xff0c;那个年代家里条件很不好&…

【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作

目录 【iVX 初级工程师培训教程 10篇文拿证】01 了解 iVX 完成新年贺卡 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏 【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照 【iV…

将WebApiTestClient添加到ASP.NET Web API帮助页面

ASP.NET Web API帮助页面是一种有用的扩展&#xff0c;可为您的Web API自动生成基于Web的文档。它使调试变得更容易&#xff0c;因为您可以将帮助页面中的信息复制/粘贴到Fiddler等工具中&#xff0c;以调用Web API服务并检查响应。现在&#xff0c;如果您可以直接在帮助页面上…

【LeetCode】3. Longest Substring Without Repeating Characters

题目&#xff1a; Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", with t…