flurl - 为发布请求创建方法时出错
问题描述
当我发布请求时,它会提供给内部服务器。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;
}
解决方案
你不需要这样做:
var paymentInJson = JsonConvert.SerializeObject(paymentPost);
PostJsonAsync
只需获取一个常规对象并将其序列化为 JSON。在这里,您有效地对其进行了双重序列化,并且服务器可能对这种格式感到困惑。
您还在做 Flurl 可以为您做的许多其他事情,例如显式创建这些 Url 和客户端对象。虽然这不会导致错误,但这就是 Flurl 通常的使用方式:
var response = await selfCareUrl
.WithBasicAuth(...)
.WithHeader(...)
...
.PostJsonAsync(paymentPost)
.ReceiveJson<List<IF.Models.PaymentPost>>();
推荐阅读
- linux - 缺少 Databricks ODBC 驱动程序
- javascript - 将值传递给存储在 Android 资产文件夹中的 HTML 文件
- android - 使用 okhttp 进行身份验证时,此处不允许返回
- python - 如何使用 Python 同时执行多个任务?
- reactjs - 如何将反应草稿文件转换为任何其他格式,例如 pdf
- java - 拆分分隔符java
- html - 用于在 html 文件中设置 css 样式的 vs 代码扩展名?
- javascript - 如何使用获取用户媒体通过麦克风异步记录用户响应,然后将其附加到我的烧瓶应用程序?
- python - 如何将 .docx style_map 导出到巨蟒并嵌入?
- c++ - 我如何在 CMAKE 中链接 GLFW 和 Dear ImGUI