将cURL -F移植到RestSharp中

时间:2017-02-18 23:48:45

标签: c# curl restsharp

我正在尝试使用第三方API(实际上是Zendesk)上传本地文件,有人可以帮我理解如何移植提供给RestSharp的示例cURL

提供的cURL示例:

curl https://{subdomain}.zendesk.com/api/v2/help_center/articles/{id}/attachments.json \ -F "inline=true" -F "file=@drawing.png" \ -v -u {email_address}:{password} -X POST

我一直在尝试使用AddFile添加它,也作为参数,但我一直遇到500内部服务器错误。

我的代码试图完成与上面的cURL相同的事情基本上是这样的:

var attachmentRequest = new RestRequest();

var attachmentURL = "api/v2/help_center/articles/" + article.id + "/attachments.json";
var attachmentPath = articlePath + "\\" + attachment.file_name;

attachmentRequest.Resource = attachmentURL;
attachmentRequest.Method = Method.POST;
attachmentRequest.AddParameter("inline", attachment.inline);
attachmentRequest.AddFile(attachment.file_name, attachmentPath);

var attachmentResponse = client.Execute(attachmentRequest); // returns status code 500

非常感谢任何帮助,我搜索了很多关于移植这些请求的信息,以及cURL和RestSharp文档,我根本无法弄清楚这一点。

2月20日更新:我仍然无法弄清楚这一点。与此同时,因为我需要一个解决方案,我实际上是调用curl可执行文件来完成此任务。当然,如果有人通过RestSharp解决这个问题,我会非常感激。

2 个答案:

答案 0 :(得分:0)

cUrl将此标识为多部分/表单请求。请参阅以下内容以获取一些细节

https://blog.tyrsius.com/restsharp-file-upload/

我相信你想要使用的代码行是

request.AlwaysMultipartFormData = true;

我现在正在摆弄类似的请求,我的结果很糟糕。

答案 1 :(得分:0)

我能够与供应商(Zendesk)取得联系并查看此请求的内容。事实证明,我需要做的就是确保有效负载符合cURL的规范,参数名称为“file”而不是文件名。我的原始代码生成了一个名为文件名的参数(根据我的AddFile调用),导致错误。所以就这么简单:

attachmentRequest.AddFile("file", attachmentPath);

显然,服务器需要一个名为“file”的参数,并且能够从文件元数据中成功读取文件名。