【问题标题】:Getting error when a method is made for post request为发布请求创建方法时出错
【发布时间】:2020-01-15 12:59:27
【问题描述】:

当我发布请求时,它会提供给内部服务器。 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;
} 

【问题讨论】:

    标签: flurl


    【解决方案1】:

    你不需要这样做:

    var paymentInJson = JsonConvert.SerializeObject(paymentPost);
    

    PostJsonAsync 只需要一个常规对象并将其序列化为 JSON。在这里,您实际上是在对其进行双重序列化,而服务器可能对这种格式感到困惑。

    您还可以做 Flurl 可以为您做的许多其他事情,例如显式创建这些 Url 和客户端对象。虽然这不会导致错误,但这就是 Flurl 通常的使用方式:

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

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多