JSON

.net的retrofit(2)

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

默认的,所有System.Net.Http.HttpContent类型的参数,都会被[HttpContent]特性修饰,而且可以与表单字段特性等混合使用。值得说明的话,传统的System.Net.Http.HttpContent类型参数必须放到其它表单字段参数的前面

默认的,所有System.Net.Http.HttpContent类型的参数,都会被[HttpContent]特性修饰,而且可以与表单字段特性等混合使用。值得说明的话,传统的System.Net.Http.HttpContent类型参数必须放到其它表单字段参数的前面。

4. 动态指定请求的域名或Url 4.1 域名动态而相对路径固定

以上的例子,请求的根路径都是硬编码,而在不少场景中是放在配置文件中的,可以在创建接口实例时创建配置项:

var config = new HttpApiConfig { // 请求的域名,会覆盖[HttpHost]特性 HttpHost = new Uri("http://www.webapiclient.com"), }; var myWebApi = HttpApiClient.Create<MyWebApi>(config); var userStr = await myWebApi.GetUserByAccountAsync("laojiu"); myWebApi.Dispose(); 4.2 每个请求接口的URL路径都是动态的

有时,多个接口方法的全部URL都是运行时才确定的,这时,需要给每个接口做如下的调整,注意[Url]特性表示参数是请求的URL,要求必须放在第一个参数。:

public interface MyWebApi : IDisposable { // GET {URL}?account=laojiu [HttpGet] ITask<string> GetUserByAccountAsync([Url] string url, string account); } 4.3 相对路径某个分段动态

有时,有些接口会将某个参数做路径的一个分段,比如GET {account},这里的{account}是动态的,获取哪个账号的资料就填写哪个账号,可以如下设计接口

public interface MyWebApi : IDisposable { // GET [HttpGet("http://www.webapiclient.com/{account}"] ITask<string> GetUserByAccountAsync(string account); } 5.参数别名或属性别名 5.1 参数别名

有些服务端接口要求的键名与你的编程风格不一致,或者使用了特殊的键名为.net语言不允许的参数名,你可以使用[AliasAs("name")]来给参数或模型的属性别名。

public interface MyWebApi : IDisposable { // GET ?_name=laojiu [HttpGet("http://www.mywebapi.com/webapi/user")] ITask<string> GetUserByAccountAsync( [AliasAs("_name")] string account); } 5.2 模型的属性别名 public class UserInfo { [AliasAs("loginAccount")] public string Account { get; set; } public string Password { get; set; } } 6.特性的范围和优先级 6.1 特性的范围

有些特性比如[Header],可以修饰于接口、方法和参数,使用不同的构造器和修饰于不同的地方产生的含义和结果是有点差别的:

6.2 特性的优先级

有些特性比如[AutoReturn]和[JsonReturn],可以修饰于接口和方法,但特性的AllowMultiple为false,如果在接口级生明方法级[AutoReturn],在方法级上声明[JsonReturn],此方法实际生效的是[JsonReturn];再比如[Tim购买天猫积分_aliww阿里旺旺买家版eout]特性,如果在接口级声明[Timeout(5000)]在方法级声明[Timeout(10000)],实际生效的是[Timeout(10000)],总结如下:

  • AllowMultiple为false的同一个特性,方法级比接口级优先级高
  • AllowMultiple为false的不同类型的[ReturnAttribute],方法级比接口级优先级高
  •  

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

    相关文章
    网友点评