簡體   English   中英

使用 RestClient 的 ExecuteAsync 時<t> () 方法,我需要為 IRestResponse 做什么<t> .Data 正確填充?</t></t>

[英]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.WasSuccessfultrue ,並且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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM