我们在使用.net 开发系统的时候,经常会遇到rest接口的调用,按照传统的方式,我们基本是使用HttpWebRequest或者WebClient,但是这样的话、我们会处理很多东西,代码量也就上来了,后来在.net 4.5提供了HttpClient这个类库,它相对于前面两个类,使用起来就更加的简洁方便,但是今天我们要说的另外两个第三方库:Flurl、RestSharp
先说说我的业务场景,事情的起因是需要调用一个接口来同步数据,这个WebAPI接口是基于ABP开发的,接口提供者加了AbpAuthorize,需要登录才能调用,所以,这里需要先获取accessToken,添加到请求头才能调用数据接口。
Flurl
Flurl是一个简单易用的Http,想要了解更多详情请至官网https://flurl.dev/查看。首先来看看登录接口返回的数据格式
{
"result": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjIiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJBc3BOZXQuSWRlbnRpdHkuU2VjdXJpdHlTdGFtcCI6ImM0ZmZmMDY1LTcxODMtMzU5MS1lYzUxLTM5ZWVhNTI3MTI4YSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IkFkbWluIiwiaHR0cDovL3d3dy5hc3BuZXRib2lsZXJwbGF0ZS5jb20vaWRlbnRpdHkvY2xhaW1zL3RlbmFudElkIjoiMSIsInN1YiI6IjIiLCJqdGkiOiJhNjJkZDhmOC03MjBlLTQ2M2YtYjA4Mi1kMzk3YzY4NzUwYzciLCJpYXQiOjE1ODA2NTMxNjIsIm5iZiI6MTU4MDY1MzE2MiwiZXhwIjoxNTgwNzM5NTYyLCJpc3MiOiJKZXdlbHJ5SWRlbnRpZmljYXRpb24iLCJhdWQiOiJKZXdlbHJ5SWRlbnRpZmljYXRpb24ifQ.PM72xGAfLcS0vYnTnWip68Uy1RC5cRxnmEPLUao-W_g",
"encryptedAccessToken": "wNYmO41/48SHNstaLVXxHCCre29BZQl1NhC6NM3R3rzpXtPQxVzH6jEzA/QhXFN5tu6Fk7pO53uppm1mVXMZgxbyRVz26dnepi/FyB6axBY+6gq1GL+uRQgoiFUCjRN2p8w6LevViwKlHyWZZJZO1DGVSjAi1m2U+og9pkHw9/Rkp3UZ8A1gKoReYXpvXHc0KFXzGY3aUxaXUOjpNPSTn4LyfFvWqGRq42yefBXGrkBTbBN3h9UXPP+25Rfae1rBCQrd8mQ0G3JHpGlVZBMKMD5RSIjWMCe3sPKe05J4ZS4x7ipM9FJHtoJ0Ev/fvM08rDbeioKKXNqOF9YqzdChxSnpsH4gsiia6e+SRx0RP0ufiLeJw4KzimdOMtvVx1NYiEKG+cqKdpJOEoq8YOoG1rr0gFcVyOJJ/KXISOsZY/ZioMa/0LHvuU69Oj1832Z2nvrtFcIjtta5u8JP6EbVPaE1OqHQOdbZ+JizrfaAod2AydR1sbDPQoq6aZx9n/wiUGX1P2RCV/pek6Te8yHJXSBE6uS/+AC+OJxgHvsXoNMCu1o1DRyp+qi590X+PzPvz9Wnwl51i2QncF9128xdt4kqGjj4PDg3hS6iXEhxIBYsEVCZa9YA2FhdgUmOJAI9Gqc4mD7L56iXfARc+bzwicFCFLq+Jax4aWqWNcAnclBj4bI2MzkBjA10jfhSMPUqThLtR2ErU/utTKO8I5MlhNiU593ju4s9IN3/Z139OQc93zGWmAAvrBwrl4JL2kjCtN+ftm4F/tbEXTW1pCPKYxTk3p0Q0JjSx/sabqGvcYTdNCzaSji7cY5aT8M2huU/oUEuPuinB2BAky82zams9cHGJIX9HRvsTfJvSrveIYhGZjexYKgjbuZgm3gs4iWBi9lSNhljgzdpa56cSjbnRHYpHbLrjgzLIKEsJs1dlAsfQ62y5KeaOLUWGP+zIEdUjA1/apD+dPNvs2tShapSWWx8xK0YRby40+Mu18Z6pkVDPKT1+1zkCJtBedz5UX0MT1pY8jU+OWKd9vPSVxsNAw==",
"expireInSeconds": 86400,
"userId": 2,
"authCode": 0
},
"targetUrl": null,
"success": true,
"error": null,
"unAuthorizedRequest": false,
"__abp": true
}
这时候,我们可以借助VS强大的粘贴功能,编辑->选择性粘贴->将JSON粘贴为类,最后的类格式如下
public class UserTokenDto
{
public Result result { get; set; }
public object targetUrl { get; set; }
public bool success { get; set; }
public object error { get; set; }
public bool unAuthorizedRequest { get; set; }
public bool __abp { get; set; }
}
public class Result
{
public string accessToken { get; set; }
public string encryptedAccessToken { get; set; }
public int expireInSeconds { get; set; }
public int userId { get; set; }
public int authCode { get; set; }
}
这时候,我们就可以调用登录接口了
var response =await "http://xxxxxx/api/TokenAuth/Authenticate".PostJsonAsync(new { usernameOrEmailAddress = "admin", password = "123qwe" }).ReceiveJson<UserTokenDto>();
return response.result.accessToken;
简单的两句代码就完成了发起请求和取返回值的操作。
那么接下来,我们就要调用数据同步接口了。因为ABP是使用的Bearer方式验证,正好Flurl为我们提供了WithOAuthBearerToken方法,可以直接使用,如果是其他方式,那么可以自己在WithHeader中添加相应的请求头。我选择的当然是简单那的方式啦
var data= await "http://xxxxxx/api/services/app/PublicityItem/GetPublicityItemFirstUnsynchronized".WithOAuthBearerToken(response.result.accessToken).GetAsync().ReceiveJson<CertInfoDataDto>();
就这样简单的一句、就完成了接口的调用,是不是很方便呢?更多信息大概去官网了解吧。
RestSharp
首先 当然还是需要去浏览官网啦http://restsharp.org/,接下来,我们就试试用的RestSharp来完成上面Flurl的操作,首先还是第一步,获取accessToken:
var client = new RestClient("http://bqp.natapp1.cc/api/");
var request = new RestRequest("TokenAuth/Authenticate", Method.POST);
var json = JsonConvert.SerializeObject(new { usernameOrEmailAddress = "admin", password = "123qwe" });
request.AddParameter("application/json", json, ParameterType.RequestBody);
var response = client.Execute(request);
var user = JsonConvert.DeserializeObject<UserTokenDto>(response.Content);
第二步调用数据同步接口
var restRequest = new RestRequest("services/app/PublicityItem/GetPublicityItemFirstUnsynchronized", Method.GET);
restRequest.AddHeader("Authorization", #34;Bearer {user.result.accessToken}");
var restResponse = client.Execute(restRequest);
这里我就是手动在请求头中加入Authorization参数。
总结
经过一番简单的对比,我觉得还是Flurl更加的简洁方便,或许是我没有深入RestSharp的缘故吧,但是总的来说,还是比之前自带的类库还方便得多。那么更多详细功能,大家自行去探究吧。
本文暂时没有评论,来添加一个吧(●'◡'●)