您好,登录后才能下订单哦!
如何进行WebApiClient百度地图服务接口实践,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,然而在应用到实际项目中多多少少会遇到一些项目结合上的疑问和困难,下面将以WebApiClient使用者的身份,在Asp.net core mvc
项目中使用WebApiClient来请求百度地图服务接口,以展示WebApiClient的使用技巧。
静态图接口
http://api.map.baidu.com/staticimage/v2?ak=你的密钥&mcode=666666¢er=116.403874,39.914888&width=300&height=200&zoom=11
坐标转换接口
http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=你的密钥
通过分析百度地图的接口,我们发现:
所有接口都在api.map.baidu.com这个域名上;
ak参数是一个客户端身份标识的参数,所有请求接口都需要附加这个ak值;
接口中需要的116.403874,39.914888这种参数值,实际是(经度,纬度),为两个值组成;
from和to是枚举数值类型;
在我们进行Coding的时候,应该重点考虑这些共性,以减少重复的工作内容。
[HttpHost("http://api.map.baidu.com/")]
public interface IBdMapApi : IHttpApi{
}
我们要实现一个接口级或方法级的ApiAction特性,用于给请求路径增加公共的ak参数:
[HttpHost("http://api.map.baidu.com/")]
[Ak("qde9uxuEhwMlngvTbWGo3BIQOKfqvjdc")]
public interface IBdMapApi : IHttpApi{
}
参照接口文档,声明最初的StaticImage接口:
目前center参数是string类型,约束性非常弱,与接口要求的(经度,纬度)这种格式数据差异比较大。所以我们应该定一个继承自IApiParameterable的BdLocation类型,将传入的经度和纬度转换为这种文本格式:
修改后StaticImage接口修改为:
[HttpGet("staticimage/v2")]
ITask<Stream> StaticImageAsync(
BdLocation center, int width = 300, int height = 200, int zoom = 11, int mcode = 666666);
依照文档,编写出最初的接口
[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);
WebApiClient的HttpApiClient创建的代理实例,适合使用单例模式,在支持依赖注入的项目开发中,应尽量使用依赖注入来完成HttpApiClient的创建和生命周期管理。
Asp.net core
的依赖注入在ConfigureServices方法里添加IBdMapApi的注入配置
如果项目里声明了很多接口,比如IBaiduApi、ITengxunApi等等,可以循环批量注入:
WebApiClient对Http请求进行的高度抽象,只有声明,没有实现,在没有熟悉WebApiClient的情况下,我们开发中可能需要在请求发送的内容进行监视,从而知道是否符合服务器的接口数据要求。在不使用第三方工具比如Fiddler等的情况下,我们可以为接口修饰一个自定义过滤器,在过滤器里实现访打印求消息内容的能力。
开启程序调试,输出窗口里打印
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。