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

标签 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 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,并显示消息:

Could not find beginning multipart boundary.

在 WireShark 中嗅探表明 HTTP 正文实际上是空的!

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

最佳答案

我发现的工作方式对我来说似乎很老套。

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

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

在将特定的 Content 类转换为(稍微更多的)通用 Content 类,然后将其转换为基接口(interface)类 HttpContent(因为它已提供给 HttpRequestMessage)似乎是错误的。

关于c# - 如何在 Linux/MacOS 上正确发送 MultipartContent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614292/

相关文章:

c# - 从 SQL Server 数据库项目引用可移植类库时出现问题

c# - Microsoft.AspNetCore.Mvc.Controller 中的 ActionContext 消失了

docker - Docker-Container内部的dotnet恢复错误-权限被拒绝

C# .NET CORE 如何获取自定义属性的值?

c# - 如何处理 ASP.NET MVC 框架中的多个提交按钮?

c# - 实例化实体模型时看不到 dbcontext 方法即 savechanges

c# - 捕获事件窗口的屏幕截图?

macos - Visual Studio Mac Preview Entity Framework SQLite 添加迁移

c# - 在 powershell 中使用 nuget 外部工具

c# - 我应该缓存并重用从 HttpClientFactory 创建的 HttpClient 吗?