美文网首页
.net中好用的Http请求库

.net中好用的Http请求库

作者: 上班只为摸鱼 | 来源:发表于2020-09-15 14:57 被阅读0次

    我们在使用.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的缘故吧,但是总的来说,还是比之前自带的类库还方便得多。那么更多详细功能,大家自行去探究吧。

    相关文章

      网友评论

          本文标题:.net中好用的Http请求库

          本文链接:https://www.haomeiwen.com/subject/aerfyktx.html