C# 通过httpc客户端上传多部分文件#

C# 通过httpc客户端上传多部分文件#,c#,asp.net,.net,curl,httpclient,C#,Asp.net,.net,Curl,Httpclient,我正在尝试使用.NETFramework4将通过cURL提交的post请求转换为带有旧应用程序的c#HTTPClient API文档请求的cURL表示法: curl -X POST -H 'Authorization: Token token=sfg999666t673t7t82' -H 'Content-Type: multipart/form-data' -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundar

我正在尝试使用.NETFramework4将通过cURL提交的post请求转换为带有旧应用程序的c#HTTPClient

API文档请求的cURL表示法:

curl -X POST -H 'Authorization: Token token=sfg999666t673t7t82' -H 'Content-Type: multipart/form-data' -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' -F file=@/Users/user1/Downloads/download.jpeg -F file_name=nameForFile -F is_shared=true -F targetable_id=1 -F targetable_type=Lead -X POST "https://domain.freshsales.io/api/documents"
我的C#代码,当前正在获取用户通过输入类型表单上载的文件,并尝试上载:

var filename = String.Format("status_{0}", DateTime.Now.ToString("dd/MM"));
        using (var content = new MultipartFormDataContent())
        {
            content.Add(new ByteArrayContent(file), "file", filename);
            content.Add(new StringContent(filename), "file_name");
            content.Add(new StringContent("true"), "is_shared");
            content.Add(new StringContent(uID), "targetable_id");
            content.Add(new StringContent("Contact"), "targetable_type");
            
            HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, $"documents") { Content = content };

            return client.SendAsync(req).Result;
        }
目前,我总是收到坏请求(400)

在《邮递员》中,我可以得到OK(201)

这是PostMan为C#RestSharp提供的代码(不确定如何将if完全翻译为HttpClient+byteArrayContent)

var client = new RestClient("mydomain.io/api/documents");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Token token=xxx");
request.AddFile("file", "/Users/user1/Desktop/sc.png");
request.AddParameter("targetable_id", "134");
request.AddParameter("targetable_type", "Contact");
request.AddParameter("name", "a.jpg");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

您是否使用Fiddler或Wireshark等工具对HTTP请求进行了比较?是否看到了它们的不同之处?您是否考虑过使用RestSharp而不是HttpClient?@mason我认为我不能使用RestSharp,因为这是一个旧版本。netFramework4.0为什么要使用不受支持的.NET版本?您应该升级到最新的4.X版本。您可以n use,它支持.NET Framework 4.0。@mason问题是,正如您在RestSharp示例中看到的那样,我发布的.addFile方法需要一个指向本地文件的路径,而在我的应用程序中,该文件是来自表单输入的流/字节数组…所以我真的不确定应该如何翻译它..可能存在该文件的重载hod或其他类似名称的方法,将接受字节数组。如果您只是尝试一下,那么Intellisense(您使用的是Visual Studio,对吗?)将帮助您找到合适的方法……。您仍然没有回答我关于Fiddler或Wireshark的问题。