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

标签 c# http file-upload 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<string, byte[]>
        {
            { "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 正文。

关于c# - 如何使用 restsharp 上传多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45665682/

相关文章:

c# - 使用 C# 通过 HTTP POST 发送文件

java - 使用 Google Endpoints 将图片上传到 Google Cloud Storage

c# - 并行树打印方法中的错误

c# - 如何有效地将一个可观察集合中的范围选择到另一个可观察集合中

http - golang http.Post 请求返回响应 404

java - 为什么HTTP GET参数应该是url的一部分

c# - 从空间检测到后删除值

c# - FileNotFoundException 抛出时间太长,有没有办法缩短超时?

ajax - JSF 2.2 - 文件上传不适用于 Ajax。表单似乎具有不正确的编码类型(仅通过 AJAX)

html - Webkit 输入文件,隐藏转换标签 : translateX