Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Linux/MacOS上正确发送MultipartContent?_C#_.net Core - Fatal编程技术网

C# 如何在Linux/MacOS上正确发送MultipartContent?

C# 如何在Linux/MacOS上正确发送MultipartContent?,c#,.net-core,C#,.net Core,在Windows上,下面的代码工作正常,但在MacOS和Linux上,它发送一个空的正文 以下是基本的代码流: // assume List<byte[]> parts; contains the body parts. // assume targetURL contains the server's URL // assume client is an HttpClient properly initialized. var msg = new HttpRequestMessa

在Windows上,下面的代码工作正常,但在MacOS和Linux上,它发送一个空的正文

以下是基本的代码流:

// assume List<byte[]> parts; contains the body parts.
// assume targetURL contains the server's URL
// assume client is an HttpClient properly initialized.

var msg = new HttpRequestMessage(HttpMethod.Post, targetURL);
var body= new MultipartContent("parallel", "boundary");
foreach(var part in parts)
{
    var mime = new ByteArrayContent(part);
    mime.Headers.ContentType = "application/octet-stream";
    mime.Headers.ContentLength = part.Length;
    body.Content.Add(mime);
}

msg.Content = body;
var result = await client.SendAsync(msg);
Console.WriteLine(String.Format("result.StatusCode = {0}", result.StatusCode));
if (result.StatusCode > 299)
    Console.WriteLine(Encoding.UTF8.GetString(result.Data));

取决于我在哪里

在Windows上,结果为202,而在MacOS上,结果为400,并显示以下消息:

找不到开始的多部分边界

在WireShark中嗅探表明HTTP主体实际上是空的


那么,如何正确使用
MultipartContent

我发现工作的方式对我来说似乎有点老套

我把它贴在这里,以防万一它是正确的答案,但我不太喜欢它

...
//msg.Content = body;
msg.Content = new StreamContent(body.ReadAsStreamAsync().Result);
var result = await client.SendAsync(msg);
...
在将特定内容类转换为(稍微多一些)通用内容类之前,将其转换为基本接口类HttpContent(因为它是提供给HttpRequestMessage的)似乎是错误的

dotnet testProgram.dll
...
//msg.Content = body;
msg.Content = new StreamContent(body.ReadAsStreamAsync().Result);
var result = await client.SendAsync(msg);
...