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

RestSharp v107+无法添加同时指定参数名与内容类型的参数

解决方案:在Multipart Form-Data中添加指定名称的JSON参数

针对你遇到的RestSharp无法同时设置JSON参数名和Content-Type的问题,这里提供两种可行方案:

方案一:使用RestSharp手动序列化并添加参数

RestSharp的AddJsonBody和AddBody在Multipart场景下会固定参数名为application/json,直接用AddParameter默认Content-Type是text/plain,所以需要手动序列化JSON对象,再指定参数名和正确的Content-Type:

var request = new RestRequest(url, Method.Post);
request.AddHeader("Host", _connectionDetails._HostUrl);
request.AlwaysMultipartFormData = true;

// 处理文件参数(优化文件MIME类型为对应格式)
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\Temp\test.xlsx");
request.AddFile("binary", bytes, "test.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

// 手动序列化JSON对象为字符串
var jsonContent = Newtonsoft.Json.JsonConvert.SerializeObject(fileDetailsDataObject);

// 添加名为"data"的JSON参数,指定Content-Type为application/json
request.AddParameter("data", jsonContent, "application/json", ParameterType.RequestBody);

说明

  • 手动序列化让我们能完全控制参数内容,通过AddParameter的重载指定"application/json"作为MediaType,生成的form-data部分会同时拥有正确的name="data"和Content-Type: application/json。
  • 若项目未引用Newtonsoft.Json,可改用.NET自带的System.Text.Json.JsonSerializer完成序列化。

方案二:切换到HttpClient实现

如果RestSharp的处理方式过于繁琐,使用.NET原生HttpClient能更直观地构建符合要求的Multipart请求:

using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using Newtonsoft.Json;

// 初始化HttpClient
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Host", _connectionDetails._HostUrl);

// 构建Multipart表单内容
using var formContent = new MultipartFormDataContent();

// 添加文件参数
byte[] fileBytes = System.IO.File.ReadAllBytes(@"C:\Temp\test.xlsx");
var fileByteArrayContent = new ByteArrayContent(fileBytes);
fileByteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
formContent.Add(fileByteArrayContent, "binary", "test.xlsx");

// 添加名为"data"的JSON参数
var jsonString = JsonConvert.SerializeObject(fileDetailsDataObject);
var jsonStringContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
formContent.Add(jsonStringContent, "data");

// 发送请求
var response = await client.PostAsync(url, formContent);
response.EnsureSuccessStatusCode(); // 确保请求执行成功

说明

  • HttpClient的MultipartFormDataContent可灵活添加任意类型的表单项,每个项都能独立设置名称、内容和Content-Type,完全匹配API的参数要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:35:54