使用RestSharp在multipart / form-data POST中包含文件的问题

时间:2019-05-14 00:55:56

标签: c# restsharp

我对使用C#进行网络交互还比较陌生,并且在发出POST请求以使用API​​上传文件时遇到了一些麻烦。 API仅接受文件作为正文中multipart / form-data节的一部分。根据其他人的建议,我一直在尝试使用RestSharp来执行此操作,但是我似乎无法将文件本身放入POST。大量来自Postman的建议代码-POST的工作位置。

我尝试了一些事情。此块导致POST的正文中带有正确的参数,但未包含任何文件。

var client = new RestClient(postURL);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", string.Format("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"upfile\"; filename=\"{0}\"\r\nContent-Type: application/xml\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"overwrite\"\r\n\r\ntrue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", xmlPath), ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string test = response.Content.ToString();

我还尝试了AddFile的一些变体-物理文件路径,字节数组和内容类型为application / xml的字节数组。通过这些迭代,我可以发布文件,但是覆盖参数没有正确传递,无法强制覆盖文件。

var client = new RestClient(postURL);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
// The different part below
request.AddFile("upfile", @xmlPath);
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"overwrite\"\r\n\r\ntrue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string test = response.Content.ToString();

*注意:我使用的是较旧版本的RestSharp(105.2.3),以便与.Net 4.0兼容(在这种情况下,请保留在它上面)。

关于我在这里做错什么的任何想法吗?

1 个答案:

答案 0 :(得分:0)

睡上它想清楚了,最后真的很简单。扔掉我的所有多余的Webkit和多部分东西都是完全不必要的-邮递员自动生成的代码看起来过于复杂。

var client = new RestClient(postURL);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddFile("upfile", @xmlPath);
request.AddParameter("overwrite", "true", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string test = response.Content.ToString();