[英]Is it possible to remove quotations from AddParameter method RestSharp?
我遇到了 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 是否有可能实现我想要的目标,或者我是否必须找到替代方案? 如果是这样,你能指出我正确的方向吗?
提前干杯和感谢!
我已经想通了。 如果有人遇到同样的问题,这里是答案:
我停止尝试用 RestSharp 修复它。 相反,我使用了 HttpClient()。 我在 InvoiceToSend 模型中添加了 api_key、控制器和动作;
public class InvoiceToSend
{
public string api_key { get; set; }
public string controller { get; set; }
public string action { get; set; }
public string DebtorCode { get; set; }
public int Term { get; set; }
public List<InvoiceLines> InvoiceLines { get; set; }
}
public class InvoiceLines
{
public string ProductCode { get; set; }
public int Number { get; set; }
}
然后用我需要的数据填充它;
var newInvoice = new InvoiceToSend();
newInvoice.api_key = _options.ApiKey;
newInvoice.controller = "invoice";
newInvoice.action = "add";
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);
}
然后使用 HttpClient() 进行 POST 调用:
var client = new HttpClient();
var json = JsonConvert.SerializeObject(newInvoice);
var data = new StringContent(json);
var response = await client.PostAsync(_options.BaseUrl, data);
希望我将来能帮助别人解决这个问题;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.