You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure.Core的RequestContent中正确使用MultipartFormDataContent

解决Azure.Core RequestContent发送Multipart表单数据的问题

直接通过RequestContent.Create(MultipartFormDataContent)无法生成符合要求的multipart请求,原因是该重载仅针对结构化数据序列化设计,不会处理MultipartFormDataContent的边界和特殊头部。以下是两种可行的解决方案:

方法1:使用Azure.Core官方的MultipartRequestContent(推荐)

Azure.Core 1.20及以上版本提供了MultipartRequestContent类,专门用于构建multipart请求,自动处理边界生成和头部设置:

using Azure.Core;
using System.Net.Http.Headers;

// 初始化multipart请求内容
var multipartContent = new MultipartRequestContent();

// 添加文本字段
multipartContent.Add(new StringContent("测试文本值"), "username");

// 添加文件内容
byte[] fileBytes = File.ReadAllBytes("example.pdf");
var fileContent = new ByteArrayContent(fileBytes);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf");
multipartContent.Add(fileContent, "attachment", "example.pdf");

// 调用Autorest生成的客户端接口
var requestContext = new RequestContext();
myAutorestClient.MyEndpointPost(multipartContent, requestContext);

方法2:手动封装MultipartFormDataContent到RequestContent

如果无法升级Azure.Core版本,可以手动将MultipartFormDataContent的内容写入RequestContent的流,并传递正确的Content-Type头部:

using System.Net.Http;

MultipartFormDataContent formData = myObject.ToMultipartFormDataContent();

// 自定义RequestContent,复制formData的流和头部
var requestContent = RequestContent.Create(
    async (stream, cancellationToken) => await formData.CopyToAsync(stream, cancellationToken),
    formData.Headers.ContentType!.ToString()
);

var requestContext = new RequestContext();
myAutorestClient.MyEndpointPost(requestContent, requestContext);

关键说明

旧代码失败的核心原因:RequestContent.Create(object)重载默认采用JSON序列化逻辑,不会识别MultipartFormDataContent的multipart格式,导致请求缺少正确的边界标识和Content-Type头部,服务器无法解析。

内容的提问来源于stack exchange,提问作者rysama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:03:20