繁体   English   中英

是否可以从 AddParameter 方法 RestSharp 中删除引号?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM