JSON

.net的retrofit

字号+ 作者:H5之家 来源:H5之家 2018-01-20 14:00 我要评论( )

广州最大的女装批发市场在哪里,淘宝女装拍照技巧图片,蒙古服装女装图片大全图片大全图片

# 库简介

WebApiClient是开源在github上的一个httpClient客户端库,内部基于HttpClient开发,是一个只需要定义c#接口(interface),并打上相关特性,即可异步调用http-api的框架 ,支持.net framework4.5+、netcoreapp2.0和netstandard2.0。本文男穿女装电影_马天奴女装是几线牌子将详细地讲解如何使用WebApiClient进行http接口的调用,给.net开发者提供一种有别于传统的http接口调用编程方式。

1. 设计一个Get请求接口 1.1 最简单的Get请求 public interface MyWebApi : IDisposable { // GET ?account=laojiu [HttpGet("http://www.mywebapi.com/webapi/user")] ITask<string> GetUserByAccountAsync(string account); } var myWebApi = HttpApiClient.Create<MyWebApi>(); var userStr = await myWebApi.GetUserByAccountAsync("laojiu"); myWebApi.Dispose(); 1.2 使用[HttpHost]特性

如果你有多个接口,而且都指向对一服务器,可以将请求的域名抽出来放到HttpHost特性,接口的代码如下:

[HttpHost("http://www.mywebapi.com")] public interface MyWebApi : IDisposable { // GET /webapi/user?account=laojiu [HttpGet("/webapi/user")] ITask<string> GetUserByAccountAsync(string account); } 1.3 使用强类型返回值处理xml或json

如果接口的返回内容是xml或json,你希望将它自动映射为强类型的模型,需要给接口打上对应的[XmlReturn]或[JsonResult]。实际上有一个[AutoReturn],它会根据回复头标识,自动选择不同的转换器转换为TResult类型的结果,默认的,每个接口都使用了[AutoReturn],除非给接口显性地给方法配置了[XmlReturn]或[JsonResult]。如果以上返回的userStr是UserInfo类型的xml或json文本,那么强类型的代码声明如下:

[HttpHost("http://www.mywebapi.com")] public interface MyWebApi : IDisposable { // GET /webapi/user?account=laojiu [HttpGet("/webapi/user")] ITask<UserInfo>杭州十大一线女装品牌排行榜2015_高清透视女装真空图片; GetUserByAccountAsync(string account); } [HttpHost("http://www.mywebapi.com")] [JsonReturn] // 指明使用Json处理返回值为UserInfo类型 public interface MyWebApi : IDisposable { // GET /webapi/user?account=laojiu [HttpGet("/webapi/user")] ITask<UserInfo> GetUserByAccountAsync(string account); } 2.请求URL的多个参数 2.1 参数平铺

你可以将多个参数一一设计为接口的参数,类似于:

// GET /webapi/user?account=laojiu&password=123456 [HttpGet("/webapi/user")] ITask<UserInfo> GetUserAsync(string account, string password); 2.2 参数合并到模型

也可以将所有参数合到一个简单的多属性模型对象:

public class MyParameters { public string Account { get; set; } public string Password { get; set; } } // GET /webapi/user?account=laojiu&password=123456 [HttpGet("/webapi/user")] ITask<UserInfo> GetUserAsync(MyParameters parameters); 2.3 模型+简单参数混合

在一些场景中,除了提交多属性模型对象之外,可能还需要一个简单类型的额外参数,你可以如下编写接口:

// GET /web皮草女装品牌_谁有女装厂家微信号api/user?account=laojiu&password=123456&birthDay=2010-01-01 01:01:01 [HttpGet("/webapi/user")] ITask<UserInfo> GetUserAsync(MyParameters parameters,DateTime birthDay);

上面这里,你可能会遇到一个问题,birthDay会简单的ToString()值做为参数值,如果你希望只需要日期而不包含时间,你可以给birthDay指定格式:

// GET /webapi/user?account=laojiu&password=123456&birthDay=2010-01-01 [HttpGet("/webapi/user")] ITask<UserInfo> GetUserAsync( MyParameters parameters, [PathQuery("yyyy-MM-dd")] DateTime birthDay);

实际上,对于没有任何特性修饰的每个参数,都默认被[PathQuery]修饰,表示做为请求路径或请求参数处理,[PathQuery]的构造器重载方法可以指定日期时间格式。

3.设计一个Post请求接口 3.1使用x-www-form-urlencoded提交请求 // POST webapi/user // Body Account=laojiu&Password=123456 [HttpPost("/webapi/user")] ITask<UserInfo> UpdateUserWithFormAsync([FormContent] UserInfo user);

设计风格和Get请求是差不多的,你应该发现,接口参数被[FormContent]修饰了,[FormContent]的作用是将模型参数user以key1=value1&key2=value2的方式写入到请求内容中我们的少年时代女装视频_买手机分期付款怎么算。如果你还需要提供一个额外的简单类型参数,需要使用[FormField]修饰这个参数,可以这样设计接口:

// POST webapi/user // Body Account=laojiu&Password=123456&fieldX=xxx [HttpPost("/webapi/user")] ITask<UserInfo> UpdateUserWithFormAsync( [FormContent] UserInfo user, [FormField] string fieldX); 3.2使用multipart/form-data提交请求 // POST webapi/user [HttpPost("/webapi/user")] ITask<UserInfo> UpdateUserWithMulitpartAsync([MulitpartContent] UserInfo user); // POST webapi/user [HttpPost("/webapi/user")] ITask<UserInfo> UpdateUserWithMulitpartAsync( [MulitpartContent] UserInfo user, [MulitpartText] string nickName, MulitpartFile file);

需要了解的是,[MulitpartText]表示是一个文本项,而MulitpartFile表示一个文件项,MulitpartFile实现了IApiParameterable接口,它不需要任何特性的修饰,它能提供自我解释和处理。

3.3提交Json或Xml文本

对于json和xml,只能一次性提交一个参数,不支持额外参数之说

// POST webapi/user // Body user的json文本 [HttpPost("/webapi/user")] ITask<UserInfo> UpdateUserWithJsonAsync([JsonContent] UserInfo user); // POST webapi/user // Body user的xml文本 [HttpPost("/webapi/user")] ITa买手机买什么牌子的好又便宜_买家等级查询sk<UserInfo> UpdateUserWithXmlAsync([XmlContent] UserInfo user);

如果你的UserInfo有DateTime类型的属性,你可以使用[JsonContent("时间格式")]来修饰接口参数,否则时间格式使用HttpApiConfig的DateTimeFormate。

3.4 提交原始的HttpContent // POST webapi/user // Body Account=laojiu&Password=123456 [HttpPost("/webapi/user")] ITask<UserInfo> UpdateUserWithFormAsync(FormUrlEncodedContent user); // POST webapi/user // Body Account=laojiu&Password=123456&age=18 [HttpPost("/webapi/user")] ITask<UserInfo> UpdateUserWithFormAsync( [HttpContent] FormUrlEncodedContent user, [FormField] int age);

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评