WebApiClient百度地图服务接口实践

1. 文章目的

随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,然而在应用到实际项目中多多少少会遇到一些项目结合上的疑问和困难,本文将以WebApiClient使用者的身份,在Asp.net core mvc项目中使用WebApiClient来请求百度地图服务接口,以展示WebApiClient的使用技巧。

2. 百度地图服务接口

  1. 静态图接口
    http://api.map.baidu.com/staticimage/v2?ak=你的密钥&mcode=666666&center=116.403874,39.914888&width=300&height=200&zoom=11

  2. 坐标转换接口
    http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=你的密钥

3. 接口分析

通过分析百度地图的接口,我们发现:

  • 所有接口都在api.map.baidu.com这个域名上;

  • ak参数是一个客户端身份标识的参数,所有请求接口都需要附加这个ak值;

  • 接口中需要的116.403874,39.914888这种参数值,实际是(经度,纬度),为两个值组成;

  • from和to是枚举数值类型;

在我们进行Coding的时候,应该重点考虑这些共性,以减少重复的工作内容。

4. 接口声明

4.1 公共域名

[HttpHost("http://api.map.baidu.com/")]
public interface IBdMapApi : IHttpApi{ }

4.2 公共的AK参数

我们要实现一个接口级或方法级的ApiAction特性,用于给请求路径增加公共的ak参数:

640?wx_fmt=png

然后把Ak特性追加到接口上:

[HttpHost("http://api.map.baidu.com/")]
[Ak("qde9uxuEhwMlngvTbWGo3BIQOKfqvjdc")]
public interface IBdMapApi : IHttpApi{ }

4.3 静态图staticimage接口

参照接口文档,声明最初的StaticImage接口:

640?wx_fmt=png

目前center参数是string类型,约束性非常弱,与接口要求的(经度,纬度)这种格式数据差异比较大。所以我们应该定一个继承自IApiParameterable的BdLocation类型,将传入的经度和纬度转换为这种文本格式:

640?wx_fmt=png

修改后StaticImage接口修改为:

[HttpGet("staticimage/v2")]
ITask<Stream> StaticImageAsync(BdLocation center,    int width = 300,    int height = 200,    int zoom = 11,    int mcode = 666666);

4.4 坐标转换Geoconv接口

依照文档,编写出最初的接口

[HttpGet("geoconv/v1/")]
ITask<string> GeoconvAsync(string coords, int from = 1, int to = 5);

和StaticImage接口一样,我们还需要合理修改这个接口的参数约束,coords实际为BdLocation类型, from和to可以修改为枚举类型,返回值string修改为强类型的模型,修改后的接口为:

[HttpGet("geoconv/v1/")]
ITask<BdResult<BdPoint[]>> GeoconvAsync(BdLocation coords,BdFrom from = BdFrom.wgs84,BdTo to = BdTo.bd09ll);

4.5 完整的接口声明

640?wx_fmt=png

5. 接口的依赖注入

WebApiClient的HttpApiClient创建的代理实例,适合使用单例模式,在支持依赖注入的项目开发中,应尽量使用依赖注入来完成HttpApiClient的创建和生命周期管理。

5.1 Asp.net core的依赖注入

在ConfigureServices方法里添加IBdMapApi的注入配置

640?wx_fmt=png

如果项目里声明了很多接口,比如IBaiduApi、ITengxunApi等等,可以循环批量注入:

640?wx_fmt=png

5.2 接收和使用IBdMapApi代理实例

640?wx_fmt=png

6. 监视请求提交的内容

WebApiClient对Http请求进行的高度抽象,只有声明,没有实现,在没有熟悉WebApiClient的情况下,我们开发中可能需要在请求发送的内容进行监视,从而知道是否符合服务器的接口数据要求。在不使用第三方工具比如Fiddler等的情况下,我们可以为接口修饰一个自定义过滤器,在过滤器里实现访打印求消息内容的能力。

6.1 定义TraceFilter过滤器

640?wx_fmt=png

6.2 接口关联TraceFilter

640?wx_fmt=png

6.3 查看请求内容

开启程序调试,输出窗口里打印

640?wx_fmt=png

7. 结束语

博主为WebApiClient库的作者,致力于站在使用者的角度去设计WebApiClient,欢迎大家给WebApiClient提建议。

原文地址https://www.cnblogs.com/kewei/p/9399372.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

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

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

相关文章

【DP】数字游戏(jzoj 2131)

数字游戏 jzoj 2131 题目大意&#xff1a; 有n个数&#xff0c;每个数有相应的aia_iai​和bib_ibi​&#xff0c;当选了一个数后结果加上aia_iai​,其他数分别减去他们自己的aja_jaj​&#xff0c;现在让你选m个数&#xff0c;结果最大是多少 输入样例 3 3 10 20 30 4 5 6…

Codeforces1045G

Codeforces1045G 做法&#xff1a;按半径r从大到小枚举&#xff0c;对于每个q&#xff0c;枚举对应位置可能的q值&#xff0c;对每个q&#xff0c;维护出现的坐标x&#xff0c;每次查询半径内的已经出现的坐标的数目即可。需要实现一个插入单点加&#xff0c;查询区间和的操作&…

[2020.10.30NOIP模拟赛]小鱼吃大鱼【RMQ】

正题 题目大意 nnn个数&#xff0c;求一对(i,j)(i,j)(i,j)要求最大化max{ai,aj}%min{ai,aj}max\{a_i,a_j\}\% min\{a_i,a_j\}max{ai​,aj​}%min{ai​,aj​} 解题思路 我们考虑枚举小的那一个iii&#xff0c;显然在ki∼k(i1)−1ki\sim k(i1)-1ki∼k(i1)−1这段范围都是要减去一…

CodeForces 1191A---Tokitsukaze and Enhancement

原题链接 Describe: Tokitsukaze is one of the characters in the game “Kantai Collection”. In this game, every character has a common attribute — health points, shortened to HP. In general, different values of HP are grouped into 4 categories: Category A…

Dependency injection in .NET Core的最佳实践

我们知道依赖注入&#xff08;DI&#xff09;是一种实现对象及其协作者或依赖关系之间松散耦合的技术。 ASP.NET Core包含一个简单的内建容器来支持构造器注入。我们试图将DI的最佳实践带到.NET Core应用程序中&#xff0c;这表现在以下方面&#xff1a;构造器注入注册组件DI i…

【状压DP】剑之修炼(jzoj 2130)

剑之修炼 jzoj 2130 题目大意&#xff1a; 在一个位置上有一个人&#xff0c;同时还有NNN&#xff08;N⩽10N \leqslant 10N⩽10&#xff09;个怪物&#xff0c;这个人会不停地释放技能&#xff0c;技能可以瞬间杀死周围8个格子上的怪物&#xff0c;行走速度是每个单位时间走…

GYM 101908F - Music Festival

GYM 101908F - Music Festival 做法&#xff1a;将节目按照右端点排序&#xff0c;\(dp[i][st][0/1]\)表示前i个节目&#xff0c;选择的stage的状态用一个n位二进制数表示为st&#xff0c;第i个节目选或不选的最大值&#xff0c;转移时用线段树优化一下。 #include <bits/st…

CodeForces - 1189A ----Keanu Reeves

原题传送 INPUT Output Examples 题意&#xff1a; 有个长度我n的字符串&#xff0c;然后把它分成k分&#xff0c;要使每份都good且为正数&#xff08;good的要求为该数中0和1的个数不同&#xff09;&#xff0c;求输出最小的结果&#xff08;答案不唯一输出一个即可&#xf…

P5072-[Ynoi2015]盼君勿忘【莫队,根号分治】

正题 题目链接:https://www.luogu.com.cn/problem/P5072 题目大意 nnn个数&#xff0c;mmm个询问(l,r,p)(l,r,p)(l,r,p)表示询问[l,r][l,r][l,r]的所有子序列的和模ppp。 解题思路 一个出现了kkk次的数会产生贡献2r−l1−2r−l1−k2^{r-l1}-2^{r-l1-k}2r−l1−2r−l1−k次贡献…

WebApiClient的接口输入验证

1. 文章目的随着WebApiClient的不断完善&#xff0c;越来越多开发者选择WebApiClient替换原生的HttpClient&#xff0c;本文将介绍WebApiClient的接口参数输入有效性验证的新特性。2.DataAnnotations介绍在asp.net mvc服务端编程中&#xff0c;我们在创建模型的时候&#xff0c…

【二分】【SPFA】架设电话线(jzoj 2132)

架设电话线 jzoj 2132 题目大意&#xff1a; 给你一个图&#xff0c;让你从1走到n&#xff0c;问如果可以使k条路的代价变为0&#xff08;自选&#xff09;&#xff0c;那途中走的路的最大值最小是多少 样例输入 5 7 1 1 2 5 3 1 4 2 4 8 3 2 3 5 2 9 3 4 7 4 5 6输入说明…

HDU5528 - Count a * b

HDU5528 - Count a * b 做法&#xff1a;求\(\sum_{m|n}(m^2 - \sum_{i1}^{m}\sum_{j1}^m [m|(ij)])\) \(h(m) \sum_{i1}^{m}\sum_{j1}^m [m|(ij)] \sum_{i1}^m\sum_{j1}^m [\frac{m}{(i,m)}|\frac{i}{(i,m)}j]\) $ \sum_{i1}^m\sum_{j1}^m [\frac{m}{(i,m)}|j] \sum_{i1}^…

CodeForces - 1189B Number Circle

原题传送器<----点我 **题意&#xff1a;**n个数字&#xff0c;请你给它们排个序围成一个环&#xff0c;满足任意一个数两边的数之和大于它本身&#xff0c;例如题目给的图&#xff08;左图为正确答案&#xff09;&#xff0c;如果不存在这样的环就输出NO。 难度★ 题解 …

P7044-[MCOI-03]括号【组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P7044?contestId36089 题目大意 一个括号序列&#xff0c;0级偏值定义为其中不合法的括号数量。 kkk级偏值定义为它所有子串的k−1k-1k−1级偏值的和。 求这个括号序列的kkk级偏值。 解题思路 后文中我们定义G(x,y)Cxy−1y…

在 .NET Core 应用中使用 NHibernate

NHibernate 最近发布了 5.1.3 版本&#xff0c; 支持 .NET Standard 2.0 &#xff0c; 这意味着可以在 .NET Core 2.0 应用中使用&#xff0c; 本文就已 WebAPI 应用为例&#xff0c; 介绍一下如何在 .NET Core 应用中如何使用 NHibernate 。1、 新建一个基于 .NET Core 的 We…

牛客网【每日一题】3月25日 tokitsukaze and Soldier

牛客网【每日一题】3月25题号&#xff1a;NC50439 名称&#xff1a; tokitsukaze and Soldier 来源&#xff1a;练习赛50-C 链接: link. 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言10…

GYM101002C - Greetings!

GYM101002C - Greetings! 做法&#xff1a;\(dp[i][S]\)表示用了\(i\)种信封&#xff0c;明信片的状态为\(S\)时的最小花费&#xff0c;预处理\(A[S]\)表示可以装的对应明信片的集合的花费, \(dp[i][s] min(dp[i-1][s-s2] A[s2]), s2 \in s\)。注意枚举所有子集&#xff0c;再…

P7045-[MCOI-03]金牌【构造,交互题】

正题 题目链接:https://www.luogu.com.cn/problem/P7045?contestId36089 题目大意 nnn个物品有一些颜色&#xff0c;可以询问QQQ次两个物品的颜色是否相同&#xff0c;求一个排列是的相邻的物品颜色不同。其中Q≥2n−2Q\geq 2n-2Q≥2n−2 解题思路 对于每一个不在头尾的物品…

【数学】礼物(jzoj 2129)

礼物 jzoj 2129 题目大意 有1……n,n个礼物盒&#xff0c;第i个礼物盒有i个礼物&#xff0c;现在让你选2个礼物盒&#xff0c;使他是k的倍数 输入样例 1 1 3 2 5 2 50 50 0 0输出样例 0 1 4 24数据范围 20%的数据N<100; 80%的数据K<1000; 每个输入文件最多有200行…

微信小程序与AspNetCore SignalR聊天实例

微信小程序与aspnetcore signalr实例本文不对小程序与signalr做任何介绍,默认读者已经掌握aspnetcore Signalr文档小程序文档写在之前SignalR没有提供小程序使用的客户端js,所以本人参考signlar.js写了小程序版signalr-client.js 代码开源&#xff0c;地址 https://github.com/…