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

Rik*_*iki 1 c# file-upload http restsharp

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

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

到目前为止,我已经编写了此代码,但是它不起作用,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<string, byte[]>
        {
            { "testfile", File.ReadAllBytes(fileName) }
        };
        request.AddParameter("files", files, RestSharp.ParameterType.RequestBody);

        var restResponse = restClient.Execute(request);
Run Code Online (Sandbox Code Playgroud)

这给我

{
  "success":false,
  "error":{
    "code":4,
    "message":"No files specified in request"
  }
}
Run Code Online (Sandbox Code Playgroud)

Rik*_*iki 7

@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 ...
Run Code Online (Sandbox Code Playgroud)

无需嵌套自定义参数或类似的复杂内容。只需添加具有这种“特殊”名称格式的文件即可。

我的错误是认为该files[filenamehere.txt]零件意味着POST主体比实际需要的更为复杂。