RestSharp的主要目的是经过HTTP对远程资源进行同步和异步调用。顾名思义,RestSharp的主要受众是使用REST API的开发人员。可是,只要您拥有要发送的资源URI和请求参数符合W3C HTTP标准,RestSharp能够经过HTTP调用任何API(但不能调用HTTP / 2)。json
为.NET开发人员使用HTTP API的主要挑战之一是处理不一样种类的请求和响应,并将它们转换为复杂的C#类型。RestSharp能够负责将请求正文序列化为JSON或XML并反序列化响应。它还能够根据不一样的参数类型(路径,查询,表单或正文)造成有效的请求URI。api
您必须先添加NuGet软件包,而后才能在应用程序中使用RestSharp。您可使用IDE或命令行执行此操做:服务器
dotnet add package RestSharp
若是您只对API提出了一些一次性请求,则能够这样使用RestSharp:异步
using RestSharp; using RestSharp.Authenticators; var client = new RestClient("https://api.twitter.com/1.1"); client.Authenticator = new HttpBasicAuthenticator("username", "password"); var request = new RestRequest("statuses/home_timeline.json", DataFormat.Json); var response = client.Get(request);
IRestResponse包含从远程服务器返回的全部信息。您能够访问标题,内容,HTTP状态等。编辑器
咱们建议使用通用重载,例如Get<T>将响应自动反序列化为.NET类。spa
全部同步方法都有其异步同级,后缀为Async。命令行
所以,您可使用和来代替Get<T>返回T或Execute<T>返回。参数集一般是相同的。您能够选择提供取消令牌,该令牌默认设置为。IRestResponse<T>GetAsync<T>ExecuteAsync<T>CancellationToken.Nonecode
例如:orm
using RestSharp; using RestSharp.Authenticators; var client = new RestClient("https://api.twitter.com/1.1"); client.Authenticator = new HttpBasicAuthenticator("username", "password"); var request = new RestRequest("statuses/home_timeline.json", DataFormat.Json); var timeline = await client.GetAsync<HomeTimeline>(request, cancellationToken);
不过,最重要的区别是,以HTTP方法命名的异步方法返回Task<T>而不是Task<IRestResponse<T>>。由于这意味着若是请求失败,您将不会收到错误响应,所以这些方法将引起异常。blog
ExecuteAsync可是,全部重载的行为都与相同,Execute并返回IRestResponse或IRestResponse<T>。
RestSharp支持将XML或JSON正文做为请求的一部分发送。要将主体添加到请求中,只需调用实例的AddJsonBody或AddXmlBody方法IRestRequest。
使用这些方法时,无需设置Content-Type或DataFormat在请求中添加参数,RestSharp会为您完成此操做。
RestSharp还将处理XML和JSON响应,并根据服务器响应类型执行全部必要的反序列化任务。所以,仅在Accept要手动反序列化响应时才须要添加标头。
例如,只须要这些行便可使用JSON正文进行请求:
var request = new RestRequest("address/update") .AddJsonBody(updatedAddress); var response = await client.PostAsync<AddressUpdateResponse>(request);
当使用Execute或时ExecuteAsync,您将得到IRestResponse具备Content属性的back实例,该实例以字符串形式包含响应。您能够在那里找到其余有用的属性,例如StatusCode,ContentType等等。若是请求未成功,您将得到响应,并将IsSuccessful属性设置为,false而且在ErrorException和ErrorMessage属性中说明了错误。
使用typeExecute<T>或时ExecuteAsync<T>,您将得到IRestResponse<T>back的实例,该实例与back实例相同,IRestResponse但也包含T Data具备反序列化响应的属性。
扩展喜欢Get<T>而且GetAsync<T>不会返回所有,IRestResponse<T>而只是反序列化的响应。null若是出现问题,您可能会回来,而且很难理解该问题。所以,在使用类型化扩展方法时,建议将IRestClient.ThrowOnAnyError属性设置为true。这样,您告诉RestSharp在出现问题时引起异常。而后,您能够将调用包装在try/catch块中,并相应地处理异常。