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



在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));

我使用以下命令进行测试:

dotnet run

dotnet testProgram.dll

取决于我在哪里。

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

找不到开始的多部分边界。

在 WireShark 中嗅探显示 HTTP 正文实际上是空的!

那么,使用MultipartContent的正确方法是什么?

我发现有效的方法对我来说似乎很笨拙。

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

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

将特定的 Content 类转换为(稍微多一点的(通用 Content 类似乎是错误的,然后再将其转换为基接口类 HttpContent,因为它被赋予 HttpRequestMessage。

相关内容

  • 没有找到相关文章