[英]When using RestClient's ExecuteAsync<T>() method, what do I need to do for IRestResponse<T>.Data to populate correctly?
我有以下代碼:
_restClient.BaseUrl = new Uri(_personioConfig.BaseUrl, "/v1/auth");
_restClient.Timeout = -1;
_restClient.AddHandler("application/json", () => new JsonDeserializer());
IRestRequest request = new RestRequest(Method.POST)
.AddQueryParameter("client_id", _personioConfig.ClientId)
.AddQueryParameter("client_secret", _personioConfig.ClientSecret)
.AddHeader("Accept", "application/json");
request.OnBeforeDeserialization = response =>
response.ContentType = "application/json";
IRestResponse<AuthorizationRequestResponse> requestResponse = await _restClient.ExecuteAsync<AuthorizationRequestResponse>(request);
其中AuthorizationRequestResponse
看起來像:
public class AuthorizationRequestResponse
{
[JsonProperty(PropertyName = "success")]
public bool WasSuccessful { get; set; }
[JsonProperty(PropertyName = "data")]
public Token Token { get; set; }
}
當我執行此操作並且請求成功時,我希望requestResponse.Data.WasSuccessful
為true
,並且requestResponse.Data.Token
的內容與requestResponse.Content
中的序列化值相對應。
或者,換句話說,我希望
AuthorizationRequestResponse? authorizationResponse = JsonConvert.DeserializeObject<AuthorizationRequestResponse>(requestResponse.Content);
Assert.Equal(authorizationResponse, requestResponse.Data);
但是,實際上requestResponse.Data.WasSuccessful
始終為false
並且requestResponse.Data.Token
始終為null
,無論requestResponse.Content
的值如何,在 Visual Studio 的調試器中,我可以看到(例如)如下所示:
"{success\":true,\"data\":{\"token\":\"eyJ0eXAiOiJKV1QiLCJhGciOi\"}}"
(為了簡潔和安全,令牌值被截斷。)
我是否遺漏或誤解了什么? 我還需要做些什么才能按預期填充“requestResponse.Data”,或者我完全錯誤地期待這個? 在這種情況下,它為什么存在?
您正在使用JsonProperty
屬性,但是您是否使用NewtonsoftJson
作為反序列化器? 我不這么認為。 假設JsonDeserializer
是 RestSharp 提供的,那么您使用的是 SimpleJson。
如果你想使用Newtonsoft.Json
,有一個 package ( RestSharp.Serializers.NewtonsoftJson
)。
如果您獲得 200 成功代碼,這里的問題肯定是反序列化。
對於請求/響應檢查,今天最簡單的方法是使用HttpTracer
提供包裝的處理程序,如所述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.