說明
RestSharp的主要目的是通過HTTP對遠程資源進行同步和異步呼叫,顧名思義,RestSharp的主要受眾是使用REST API的開發人員,但是,只要您擁有要發送的資源URI和請求引數符合W3C HTTP標準,RestSharp可以通過HTTP呼叫任何API(但不能呼叫HTTP / 2),
為.NET開發人員使用HTTP API的主要挑戰之一是處理不同種類的請求和回應,并將它們轉換為復雜的C#型別,RestSharp可以負責將請求正文序列化為JSON或XML并反序列化回應,它還可以根據不同的引數型別(路徑,查詢,表單或正文)形成有效的請求URI,
入門
您必須先添加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類,
異步呼叫
所有同步方法都有其異步同級,后綴為Async,
因此,您可以使用和來代替Get<T>回傳T或Execute<T>回傳,引數集通常是相同的,您可以選擇提供取消令牌,該令牌默認設定為,IRestResponse<T>GetAsync<T>ExecuteAsync<T>CancellationToken.None
例如:
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>>,因為這意味著如果請求失敗,您將不會收到錯誤回應,因此這些方法將引發例外,
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塊中,并相應地處理例外,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/253311.html
標籤:.NET Core
上一篇:一文說通Dotnet的委托
