如何使用restsharp上传多个文件?

我想上传文件到这个api https://support.crowdin.com/api/add-file/

如何使用RestSharp创建名为files的参数并向其添加多个文件?

我到目前为止编写了这段代码,但它不起作用,RestSharp似乎没有按预期上传文件。

  var addUrl = new Uri($"https://api.crowdin.com/api/project/{projectIdentifier}/add-file?key={projectKey}&json="); var restClient = new RestSharp.RestClient("https://api.crowdin.com"); var request = new RestSharp.RestRequest($"api/project/{projectIdentifier}/add-file", RestSharp.Method.POST); request.AlwaysMultipartFormData = true; request.AddQueryParameter("key", projectKey); request.AddQueryParameter("json", ""); var files = new Dictionary { { "testfile", File.ReadAllBytes(fileName) } }; request.AddParameter("files", files, RestSharp.ParameterType.RequestBody); var restResponse = restClient.Execute(request); 

这给了我

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

@SirRufo在评论中提到了解决方案但未将其作为解决方案发布,所以我将在此解释。

http POST方法实际上没有数组的概念。 相反,在字段名称中使用方括号只是一种约定。

此示例代码有效:

  var restClient = new RestSharp.RestClient("https://api.crowdin.com"); var request = new RestSharp.RestRequest($"api/project/{projectIdentifier}/add-file", RestSharp.Method.POST); request.AlwaysMultipartFormData = true; request.AddHeader("Content-Type", "multipart/form-data"); request.AddQueryParameter("key", projectKey); request.AddQueryParameter("json", ""); request.AddFile("files[testfile1.pot]", fileName); request.AddFile("files[testfile2.pot]", fileName); // Just Execute(...) is missing ... 

无需嵌套自定义参数或任何复杂的参数。 只需添加具有此“特殊”名称格式的文件即可。

我的错误是认为files[filenamehere.txt]部分暗示了一个比实际需要更复杂的POST主体。