.net中好用的Http请求库

我们在使用.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粘贴为类,最后的类格式如下

publicclassUserTokenDto

{publicResult result {get;set; }

publicobjecttargetUrl {get;set; }

publicboolsuccess {get;set; }

publicobjecterror {get;set; }

publicboolunAuthorizedRequest {get;set; }

publicbool__abp {get;set; }

}publicclassResult

{publicstringaccessToken {get;set; }

publicstringencryptedAccessToken {get;set; }

publicintexpireInSeconds {get;set; }

publicintuserId {get;set; }

publicintauthCode {get;set; }

}

这时候,我们就可以调用登录接口了

varresponse =await"http://xxxxxx/api/TokenAuth/Authenticate".PostJsonAsync(new{ usernameOrEmailAddress ="admin", password ="123qwe"}).ReceiveJson();

returnresponse.result.accessToken;

简单的两句代码就完成了发起请求和取返回值的操作。

那么接下来,我们就要调用数据同步接口了。因为ABP是使用的Bearer方式验证,正好Flurl为我们提供了WithOAuthBearerToken方法,可以直接使用,如果是其他方式,那么可以自己在WithHeader中添加相应的请求头。我选择的当然是简单那的方式啦

vardata=await"http://xxxxxx/api/services/app/PublicityItem/GetPublicityItemFirstUnsynchronized".WithOAuthBearerToken(response.result.accessToken).GetAsync().ReceiveJson();

就这样简单的一句、就完成了接口的调用,是不是很方便呢?更多信息大概去官网了解吧。

RestSharp

首先 当然还是需要去浏览官网啦http://restsharp.org/,接下来,我们就试试用的RestSharp来完成上面Flurl的操作,首先还是第一步,获取accessToken:

varclient =newRestClient("http://bqp.natapp1.cc/api/");

varrequest =newRestRequest("TokenAuth/Authenticate", Method.POST);

varjson = JsonConvert.SerializeObject(new{ usernameOrEmailAddress ="admin", password ="123qwe"});

request.AddParameter("application/json", json, ParameterType.RequestBody);

varresponse = client.Execute(request);

varuser = JsonConvert.DeserializeObject(response.Content);

第二步调用数据同步接口

varrestRequest =newRestRequest("services/app/PublicityItem/GetPublicityItemFirstUnsynchronized", Method.GET);

restRequest.AddHeader("Authorization",$"Bearer{user.result.accessToken}");

varrestResponse = client.Execute(restRequest);

这里我就是手动在请求头中加入Authorization参数。

总结

经过一番简单的对比,我觉得还是Flurl更加的简洁方便,或许是我没有深入RestSharp的缘故吧,但是总的来说,还是比之前自带的类库还方便得多。那么更多详细功能,大家自行去探究吧。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。