将 cURL -F 移植到 RestSharp
Porting cURL -F into RestSharp
我正在尝试使用第三方 API(实际上是 Zendesk)上传本地文件,有人可以帮助我了解如何将提供的示例 cURL 移植到 RestSharp
提供的 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 解决这个问题有任何见解,我将非常感激。
cUrl 表明这是一个 multipart/form 请求。有关详细信息,请参阅以下内容
https://blog.tyrsius.com/restsharp-file-upload/
我相信您要使用的代码行是
request.AlwaysMultipartFormData = true;
我现在正在处理一个类似的请求,所以 post 我的结果很糟糕。
我能够与供应商 (Zendesk) 取得联系并查看此请求的处理情况。事实证明,我需要做的就是确保负载符合 cURL 的规范,参数名称 "file" 而不是文件名。我的原始代码生成了一个名为文件名的参数(根据我的 AddFile 调用),这导致了错误。所以就这么简单:
attachmentRequest.AddFile("file", attachmentPath);
显然,服务器需要一个名为 "file" 的参数,并且能够从文件元数据中成功读取文件名。
我正在尝试使用第三方 API(实际上是 Zendesk)上传本地文件,有人可以帮助我了解如何将提供的示例 cURL 移植到 RestSharp
提供的 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 解决这个问题有任何见解,我将非常感激。
cUrl 表明这是一个 multipart/form 请求。有关详细信息,请参阅以下内容
https://blog.tyrsius.com/restsharp-file-upload/
我相信您要使用的代码行是
request.AlwaysMultipartFormData = true;
我现在正在处理一个类似的请求,所以 post 我的结果很糟糕。
我能够与供应商 (Zendesk) 取得联系并查看此请求的处理情况。事实证明,我需要做的就是确保负载符合 cURL 的规范,参数名称 "file" 而不是文件名。我的原始代码生成了一个名为文件名的参数(根据我的 AddFile 调用),这导致了错误。所以就这么简单:
attachmentRequest.AddFile("file", attachmentPath);
显然,服务器需要一个名为 "file" 的参数,并且能够从文件元数据中成功读取文件名。