嘉兴简单建站,微信页面,医疗机构 网站备案,网站关键词优化排名外包1. 文章目的随着WebApiClient的不断完善#xff0c;越来越多开发者选择WebApiClient替换原生的HttpClient#xff0c;然而在应用到实际项目中多多少少会遇到一些项目结合上的疑问和困难#xff0c;本文将以WebApiClient使用者的身份#xff0c;在Asp.net core mvc项目中使用… 1. 文章目的随着WebApiClient的不断完善越来越多开发者选择WebApiClient替换原生的HttpClient然而在应用到实际项目中多多少少会遇到一些项目结合上的疑问和困难本文将以WebApiClient使用者的身份在Asp.net core mvc项目中使用WebApiClient来请求百度地图服务接口以展示WebApiClient的使用技巧。2. 百度地图服务接口静态图接口http://api.map.baidu.com/staticimage/v2?ak你的密钥mcode666666center116.403874,39.914888width300height200zoom11坐标转换接口http://api.map.baidu.com/geoconv/v1/?coords114.21892734521,29.575429778924from1to5ak你的密钥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参数然后把Ak特性追加到接口上[HttpHost(http://api.map.baidu.com/)]
[Ak(qde9uxuEhwMlngvTbWGo3BIQOKfqvjdc)]public interface IBdMapApi : IHttpApi{
}4.3 静态图staticimage接口参照接口文档声明最初的StaticImage接口目前center参数是string类型约束性非常弱与接口要求的(经度,纬度)这种格式数据差异比较大。所以我们应该定一个继承自IApiParameterable的BdLocation类型将传入的经度和纬度转换为这种文本格式修改后StaticImage接口修改为[HttpGet(staticimage/v2)]ITaskStream StaticImageAsync(BdLocation center, int width 300, int height 200, int zoom 11, int mcode 666666);4.4 坐标转换Geoconv接口依照文档编写出最初的接口[HttpGet(geoconv/v1/)]ITaskstring GeoconvAsync(string coords, int from 1, int to 5);和StaticImage接口一样我们还需要合理修改这个接口的参数约束coords实际为BdLocation类型 from和to可以修改为枚举类型返回值string修改为强类型的模型修改后的接口为:[HttpGet(geoconv/v1/)]
ITaskBdResultBdPoint[] GeoconvAsync(BdLocation coords,BdFrom from BdFrom.wgs84,BdTo to BdTo.bd09ll);4.5 完整的接口声明5. 接口的依赖注入WebApiClient的HttpApiClient创建的代理实例适合使用单例模式在支持依赖注入的项目开发中应尽量使用依赖注入来完成HttpApiClient的创建和生命周期管理。5.1 Asp.net core的依赖注入在ConfigureServices方法里添加IBdMapApi的注入配置如果项目里声明了很多接口比如IBaiduApi、ITengxunApi等等可以循环批量注入5.2 接收和使用IBdMapApi代理实例6. 监视请求提交的内容WebApiClient对Http请求进行的高度抽象只有声明没有实现在没有熟悉WebApiClient的情况下我们开发中可能需要在请求发送的内容进行监视从而知道是否符合服务器的接口数据要求。在不使用第三方工具比如Fiddler等的情况下我们可以为接口修饰一个自定义过滤器在过滤器里实现访打印求消息内容的能力。6.1 定义TraceFilter过滤器6.2 接口关联TraceFilter6.3 查看请求内容开启程序调试输出窗口里打印7. 结束语博主为WebApiClient库的作者致力于站在使用者的角度去设计WebApiClient欢迎大家给WebApiClient提建议。原文地址https://www.cnblogs.com/kewei/p/9399372.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com