【发布时间】:2021-10-26 13:37:44
【问题描述】:
我在使用 RestSharp 时遇到了问题。我需要进行 POST 调用,但使用引号它不起作用。
JSON 需要如下所示:
{
"api_key": "<api key>",
"controller": "invoice",
"action": "add",
"DebtorCode": "DB10000",
"Term": 14,
"InvoiceLines": [{"ProductCode":"P0001","Number":15},{"ProductCode":"P0002","Number":15},{"ProductCode":"P0003","Number":15}]
}
但是当我发送我的请求时,它被这样接收:导致它失败。
{
"api_key": "<api key>",
"controller": "invoice",
"action": "add",
"DebtorCode": "DB10000",
"Term": "14",
"InvoiceLines": "[{\"ProductCode\":\"P0001\",\"Number\":15},{\"ProductCode\":\"P0002\",\"Number\":15},{\"ProductCode\":\"P0003\",\"Number\":15}]"
}
我的调用代码如下:
var newInvoice = new InvoiceToSend();
newInvoice.DebtorCode = invoiceItem.DebtorCode;
newInvoice.Term = Convert.ToInt32(invoiceItem.Term);
newInvoice.InvoiceLines = new List<InvoiceLines>();
for (int i = 0; i < invoiceItem.InvoiceLines.Count; i++)
{
var newLine = new InvoiceLines();
newLine.Number = Convert.ToInt32(invoiceItem.InvoiceLines[i].Number);
newLine.ProductCode = invoiceItem.InvoiceLines[i].ProductCode;
newInvoice.InvoiceLines.Add(newLine);
}
object invoiceLines = JsonConvert.SerializeObject(newInvoice.InvoiceLines);
var request = new RestRequest(Method.POST)
{
AlwaysMultipartFormData = true
};
request.AddParameter("api_key", _options.ApiKey, ParameterType.GetOrPost);
request.AddParameter("controller", "invoice", ParameterType.GetOrPost);
request.AddParameter("action", "add", ParameterType.GetOrPost);
request.AddParameter("DebtorCode", newInvoice.DebtorCode);
request.AddParameter("Term", newInvoice.Term);
request.AddParameter("InvoiceLines", invoiceLines);
var response = Client.Execute(request);
现在我在互联网上看到很多帖子说你需要使用 AddBody 或 AddJsonBody 而不是 AddParameter,但是我的 POST 调用的接收者不接受“application/json”作为名称,所以这不起作用。
RestSharp 是否有可能实现我想要的,还是我必须找到替代方案?如果是这样,你能指出我正确的方向吗?
提前干杯和感谢!
【问题讨论】:
-
object invoiceLines = JsonConvert.SerializeObject(newInvoice.InvoiceLines);这是你的错误,它是双重序列化。只需传入request.AddParameter("InvoiceLines", newInvoice.InvoiceLines); -
不要序列化
invoiceLines。发送请求时会自动序列化 -
"我的 POST 调用的接收者不接受 "application/json" 那他们为什么要接受 JSON 内容呢?
-
嘿@Charlieface,如果我不序列化它,它会这样接收:“InvoiceLines”:“System.Collections.Generic.List`1[Timesheet_Api.Models.InvoiceLines]”} 所以我觉得没关系。
-
想一想:作为一个查询参数,我不确定它在没有引用的情况下是否有效。它不应该是 JSON 正文而不是查询字符串参数吗?好像还有
QueryStringWithoutEncode
标签: c# json asp.net-core restsharp