使用第三方类库refit来调用WebApi
ZKEASOFT March 15, 2018
调用WebApi其实就是发起Web请求来获取结果,使用第三方的类库可以提高开发速度,接下来简单介绍一下refit.
项目地址
refit是一个开源项目,同时支持.NET Core, Xamarin and .NET,GitHub:https://github.com/paulcbetts/refit
快速开始
refit的使用方式是通过定义接口来对应WebApi接口,例如:
public interface IGitHubApi { [Get("/users/{user}")] Task<User> GetUser(string user); }
然后通过 RestService
类来生成接口 IGitHubApi
的实现并通过 HttpClient
来调用WebApi:
var gitHubApi = RestService.For<IGitHubApi>("https://api.github.com");
var octocat = await gitHubApi.GetUser("octocat");
API Attributes
每种方法都必须具有提供请求方法和相对的URL路径。一共有5种:Get, Post, Put, Delete, and Head:
[Get("/users/list")]
也可直接将参数写到URL中:
[Get("/users/list?sort=desc")]
每个请求的URL,都可以使用大括号“{}”替换的方式来动态生成,如果参数的名称不匹配,可以使用别名:
[Get("/group/{id}/users")] Task<List<User>> GroupList([AliasAs("id")] int groupId);
如果参数没有在URL中定义也会自动加到请求的URL中,例如sort没有定义:
[Get("/group/{id}/users")] Task<List<User>> GroupList([AliasAs("id")] int groupId, [AliasAs("sort")] string sortOrder); GroupList(4, "desc"); >>> "/group/4/users?sort=desc"
动态参数
如果将一个类型实例作为参数,那么它的所有的非空的public的属性都会作为参数来使用,还可以使用Query特性来整理你的参数:
public class MyQueryParams { [AliasAs("order")] public string SortOrder { get; set; } public int Limit { get; set; } } [Get("/group/{id}/users")] Task<List<User>> GroupList([AliasAs("id")] int groupId, MyQueryParams params); [Get("/group/{id}/users")] Task<List<User>> GroupListWithAttribute([AliasAs("id")] int groupId, [Query(".","search")] MyQueryParams params); params.SortOrder = "desc"; params.Limit = 10; GroupList(4, params) >>> "/group/4/users?order=desc&Limit=10" GroupListWithAttribute(4, params) >>> "/group/4/users?search.order=desc&search.Limit=10"
更详细的使用方式,请参阅官方的文档:http://paulcbetts.github.io/refit