聊聊RestSharp.net REST/HTTP 工具库

开发 开发工具
顾名思义,RestSharp的主要受众是使用REST API的开发人员。但是,只要您拥有要发送的资源URI和请求参数符合W3C HTTP标准,RestSharp可以通过HTTP调用任何API(但不能调用HTTP / 2)。

[[378590]]

本文转载自微信公众号「UP技术控」,作者conan5566 。转载本文请联系UP技术控公众号。    

说明

RestSharp的主要目的是通过HTTP对远程资源进行同步和异步调用。顾名思义,RestSharp的主要受众是使用REST API的开发人员。但是,只要您拥有要发送的资源URI和请求参数符合W3C HTTP标准,RestSharp可以通过HTTP调用任何API(但不能调用HTTP / 2)。

为.NET开发人员使用HTTP API的主要挑战之一是处理不同种类的请求和响应,并将它们转换为复杂的C#类型。RestSharp可以负责将请求正文序列化为JSON或XML并反序列化响应。它还可以根据不同的参数类型(路径,查询,表单或正文)形成有效的请求URI。

入门

您必须先添加NuGet软件包,然后才能在应用程序中使用RestSharp。您可以使用IDE或命令行执行此操作:

  1. dotnet add package RestSharp 

基本用法

如果您只对API提出了一些一次性请求,则可以这样使用RestSharp:

  1. using RestSharp; 
  2. using RestSharp.Authenticators; 
  3.  
  4. var client = new RestClient("https://api.twitter.com/1.1"); 
  5. client.Authenticator = new HttpBasicAuthenticator("username""password"); 
  6.  
  7. var request = new RestRequest("statuses/home_timeline.json", DataFormat.Json); 
  8.  
  9. var response = client.Get(request); 

IRestResponse包含从远程服务器返回的所有信息。您可以访问标题,内容,HTTP状态等。

我们建议使用通用重载,例如Get将响应自动反序列化为.NET类。

异步呼叫

所有同步方法都有其异步同级,后缀为Async。

因此,您可以使用和来代替Get返回T或Execute返回。参数集通常是相同的。您可以选择提供取消令牌,该令牌默认设置为。IRestResponseGetAsyncExecuteAsyncCancellationToken.None

例如:

  1. using RestSharp; 
  2. using RestSharp.Authenticators; 
  3.  
  4. var client = new RestClient("https://api.twitter.com/1.1"); 
  5. client.Authenticator = new HttpBasicAuthenticator("username""password"); 
  6.  
  7. var request = new RestRequest("statuses/home_timeline.json", DataFormat.Json); 
  8.  
  9. var timeline = await client.GetAsync<HomeTimeline>(request, cancellationToken); 

不过,最重要的区别是,以HTTP方法命名的异步方法返回Task而不是Task

ExecuteAsync但是,所有重载的行为都与相同,Execute并返回IRestResponse或IRestResponse

内容类型

RestSharp支持将XML或JSON正文作为请求的一部分发送。要将主体添加到请求中,只需调用实例的AddJsonBody或AddXmlBody方法IRestRequest。

使用这些方法时,无需设置Content-Type或DataFormat在请求中添加参数,RestSharp会为您完成此操作。

RestSharp还将处理XML和JSON响应,并根据服务器响应类型执行所有必要的反序列化任务。因此,仅在Accept要手动反序列化响应时才需要添加标头。

例如,只需要这些行即可使用JSON正文进行请求:

  1. var request = new RestRequest("address/update"
  2.     .AddJsonBody(updatedAddress); 
  3. var response = await client.PostAsync<AddressUpdateResponse>(request); 

响应

当使用Execute或时ExecuteAsync,您将获得IRestResponse具有Content属性的back实例,该实例以字符串形式包含响应。您可以在那里找到其他有用的属性,例如StatusCode,ContentType等等。如果请求未成功,您将获得响应,并将IsSuccessful属性设置为,false并且在ErrorException和ErrorMessage属性中说明了错误。

使用typeExecute或时ExecuteAsync,您将获得IRestResponseback的实例,该实例与back实例相同,IRestResponse但也包含T Data具有反序列化响应的属性。

扩展喜欢Get并且GetAsync不会返回全部,IRestResponse而只是反序列化的响应。null如果出现问题,您可能会回来,并且很难理解该问题。因此,在使用类型化扩展方法时,建议将IRestClient.ThrowOnAnyError属性设置为true。这样,您告诉RestSharp在出现问题时引发异常。然后,您可以将调用包装在try/catch块中,并相应地处理异常。

 

责任编辑:武晓燕 来源: UP技术控
相关推荐

2024-02-29 18:06:39

HTTP性能优化

2023-03-27 08:49:51

2021-02-07 09:05:56

微服务结构云原生

2024-06-17 10:38:47

RefitHTTP 请求C#

2021-10-04 19:49:23

HTTP模块No.js

2022-05-09 08:34:01

FeignhttpJava

2024-10-15 09:34:57

2021-07-11 12:12:49

.NETJWTjson

2016-11-28 09:00:10

浏览器浏览器缓存服务端

2024-05-06 00:00:00

.NET分布式锁技术

2021-06-08 09:28:12

.Net通知服务

2021-07-14 06:45:49

Windows.NetTopshelf

2021-03-05 11:35:39

Linux 命令工具

2024-02-29 07:28:44

Cron表达式解析库

2022-08-02 20:21:42

开源项目工具

2022-11-30 21:32:23

开源buildah工具

2022-04-27 09:28:11

HTTPExpires

2023-01-27 23:11:25

GolangNetHttp

2024-09-30 08:10:22

2024-02-05 08:50:57

Golang标准库客户端
点赞
收藏

51CTO技术栈公众号