使用 C#、RestSharp、Redmine API 通过 POST 调用上传文件

本文关键字:调用 POST 文件 API RestSharp Redmine 使用 通过 | 更新日期: 2023-09-27 18:36:21

我正在开发一个使用 Redmine REST API 的 C# 应用程序,它使用 RestSharp Client。所有其他 REST 调用我都可以正常工作,但我找不到上传附件的方法。我已经广泛搜索了网络并尝试了许多解决方案,但没有任何效果。附件上的红矿文档:http://www.redmine.org/projects/redmine/wiki/Rest_api#Attaching-files代码实际上看起来像:

RestClient client = new RestClient("http://myclient/redmine/");
client.Authenticator = new HttpBasicAuthenticator("myuser", "mypsw");
var request2 = new RestRequest("uploads.json", Method.POST);
request2.AddHeader("Content-Type", "application/octet-stream");
request2.RequestFormat = RestSharp.DataFormat.Json;
byte[] dataToSend = File.ReadAllBytes(AddIssue.attach.Text);
request2.AddBody(dataToSend);
IRestResponse response2 = client.Execute(request2);
resultbox.Text = response2.Content;

如果我在上面执行它,则没有任何反应,并且响应为空。如果我删除第 7 行(AddBody),它实际上可以工作,但当然没有上传任何内容,JSON 响应:{ "上传":{ "令牌":"11。 }}

所以实际上,真正的问题是在AddBody()中下注什么才能将文件作为应用程序/八位字节流发送。由于RestSharp也有要求。AddFile() 方法,我也以不同的方式尝试过,但没有...

任何帮助非常感谢!

使用 C#、RestSharp、Redmine API 通过 POST 调用上传文件

正如我在评论中提到的,听起来Redmine可能有类似于Dropbox的要求。这是对我有用的解决方案(基于使用Restsharp PCL上传到保管箱的问题):

public static void UploadFileToDropbox(string filePath)
{
    RestClient client = new RestClient("https://api-content.dropbox.com/1/");
    IRestRequest request = new RestRequest("files_put/auto/{path}", Method.PUT);
    FileInfo fileInfo = new FileInfo(filePath);
    long fileLength = fileInfo.Length;
    request.AddHeader("Authorization", "Bearer INSERT_DEVELOPER_TOKEN_HERE");
    request.AddHeader("Content-Length", fileLength.ToString());
    request.AddUrlSegment("path", string.Format("Public/{0}", fileInfo.Name));
    byte[] data = File.ReadAllBytes(filePath);
    var body = new Parameter
    {
        Name = "file",
        Value = data,
        Type = ParameterType.RequestBody,
    };
    request.Parameters.Add(body);
    IRestResponse response = client.Execute(request);
} 

也作为要点出版。

我知道这不是你的确切情况,但希望它能给你一些想法。