C# 如何在Linux/MacOS上正确发送MultipartContent?
在Windows上,下面的代码工作正常,但在MacOS和Linux上,它发送一个空的正文 以下是基本的代码流: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
// 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);
...