Получение ошибки при создании метода для пост-запроса - PullRequest
0 голосов
/ 15 января 2020

Когда я отправляю запрос, производится его подача на внутренний сервер. Является ли реализация Flurl в порядке, или я делаю что-то не так.

try
{
    Models.PaymentPost paymentPost = new Models.PaymentPost();
    paymentPost.Parts = new Models.Parts();
    paymentPost.Parts.Specification = new Models.Specification();
    paymentPost.Parts.Specification.CharacteristicsValue = new List<Models.CharacteristicsValue>();
    paymentPost.Parts.Specification.CharacteristicsValue.Add(new Models.CharacteristicsValue { CharacteristicName = "Amount", Value = amount });
    paymentPost.Parts.Specification.CharacteristicsValue.Add(new Models.CharacteristicsValue { CharacteristicName = "AccountReference", Value = accountId });

    foreach (var item in extraParameters)
    {
        paymentPost.Parts.Specification.CharacteristicsValue.Add(new Models.CharacteristicsValue { 
        CharacteristicName = item.Key, Value = item.Value });
    }
    var paymentInJson = JsonConvert.SerializeObject(paymentPost);
    var selfCareUrl = "http://svdt5kubmas01.safari/auth/processPaymentAPI/v1/processPayment";
    var fUrl = new Flurl.Url(selfCareUrl);
    fUrl.WithBasicAuth("***", "********");
    fUrl.WithHeader("X-Source-System", "POS");
    fUrl.WithHeader("X-Route-ID", "STKPush");
    fUrl.WithHeader("Content-Type", "application/json");
    fUrl.WithHeader("X-Correlation-ConversationID", "87646eaa-2605-405e-967c-56e8002b5");
    fUrl.WithHeader("X-Route-Timestamp", "150935");
    fUrl.WithHeader("X-Source-Operator", " ");
    var response = await clientFactory.Get(fUrl).Request().PostJsonAsync(paymentInJson).ReceiveJson<IEnumerable<IF.Models.PaymentPost>>();
    return response;
}
catch (FlurlHttpException ex)
{
    dynamic d = ex.GetResponseJsonAsync();
    //string s = ex.GetResponseStringAsync();
    return d;
} 

1 Ответ

0 голосов
/ 15 января 2020

Вам не нужно делать это:

var paymentInJson = JsonConvert.SerializeObject(paymentPost);

PostJsonAsync просто берет обычный объект и сериализует его для JSON для вас. Здесь вы фактически дважды сериализуете его, и сервер, вероятно, смущен этим форматом.

Вы также делаете много других вещей, которые Flurl может сделать для вас, например, создание этих объектов Url и клиента. в явном виде. Хотя это и не вызывает ошибок, обычно используется Flurl:

var response = await selfCareUrl
    .WithBasicAuth(...)
    .WithHeader(...)
    ...
    .PostJsonAsync(paymentPost)
    .ReceiveJson<List<IF.Models.PaymentPost>>();
...