C# 如何使用HttpClient上传一组文件?

C# 如何使用HttpClient上传一组文件?,c#,post,file-upload,httpclient,C#,Post,File Upload,Httpclient,如何使用HttpClient将多个文件上载到此api? 它需要一个名为files的post参数,该参数包含一个文件数组 HttpClient client = new HttpClient(); using (var content = new MultipartFormDataContent()) { var files = new MultipartContent("files"); var fileContent = new

如何使用HttpClient将多个文件上载到此api? 它需要一个名为
files
的post参数,该参数包含一个文件数组

HttpClient client = new HttpClient();
using (var content = new MultipartFormDataContent())
        {
            var files = new MultipartContent("files");

            var fileContent = new StreamContent(fileStream);
            fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") { FileName = "test.locale.pot" };
            fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/pot");
            files.Add(fileContent);

            content.Add(files);

            content.Add(new StringContent("gettext"), "type");

            var statusResult = client.PostAsync(addUrl, content).Result;
            var statusString = statusResult.Content.ReadAsStringAsync().Result;
        }
不幸的是,我一直在

{
  "success":false,
  "error":{
    "code":4,
    "message":"No files specified in request"
  }
}

最后,我想对RestSharp做同样的事情,但是RestSharp和HttpClient有一个完全不同的API。

要正确地将多个文件上传到crowdin,需要做很多事情

您需要设置内容配置:名称和文件名

        using (var content = new MultipartFormDataContent())
        {
            var fileNameOnly = Path.GetFileName(fileName);
            var fileContent = new StreamContent(File.OpenRead(fileName));
            fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
            {
                Name = $"files[{fileNameOnly}]",
                FileName = fileNameOnly
            };
            fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/pot"); // "gettext" POT format

            content.Add(fileContent, $"files[{fileNameOnly}]");

            content.Add(new StringContent("gettext"), "type");


            var statusResult = client.PostAsync(addUrl, content).Result;
            var statusString = statusResult.Content.ReadAsStringAsync().Result;
        }

只需将文件直接添加到内容中就可以了(假设您给了它正确的名称)。

对于您将找到的任何基于http的客户端,您是否会反复问这个问题?@SirRufo不,我不会再问了,这两个类有不同的API,并且以不同的方式工作。因此,解决方案肯定会有所不同。我不是故意让你不高兴的。这是一个不同的代码,所以我不认为它是重复的。