首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Linux/MacOS上正确发送MultipartContent?

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

Stack Overflow用户
提问于 2018-05-31 06:44:07
回答 1查看 46关注 0票数 2

在Windows上,下面的代码运行得很好,但是在MacOS和Linux上,它会发送一个空的正文。

下面是基本的代码流:

代码语言:javascript
复制
// 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));

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

代码语言:javascript
复制
dotnet run

代码语言:javascript
复制
dotnet testProgram.dll

这取决于我在哪里

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

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

在WireShark中嗅探可以发现HTTP实际上是空的!

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

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 06:49:28

我发现这种工作方式对我来说似乎很麻烦。

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

代码语言:javascript
复制
...
//msg.Content = body;
msg.Content = new StreamContent(body.ReadAsStreamAsync().Result);
var result = await client.SendAsync(msg);
...

在将特定的内容类转换为(稍微更通用的)内容类之前,将其转换为提供给HttpRequestMessage的基接口类HttpContent似乎是错误的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50614292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档