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

如何以form-data类型调用API?请求发送后抛出格式无效异常

问题:form-data提交JSON格式数据时触发格式无效异常

我向API发送POST请求,要求以form-data类型提交,但收到响应后抛出异常:

值'{"Id":"1111111","Message":"something","Description":"something"}'的格式无效。

原代码

SendingRequestModel requestModel = new SendingRequestModel();

requestModel.Id = "1111111";
requestModel.Message = "something";
requestModel.Description= "something";

string message = JsonSerializer.Serialize(requestModel);

var serviceSettings = appSettings.ServiceSettings;

var options = new RestClientOptions(serviceSettings.ServiceUrl)
{
    Authenticator = new HttpBasicAuthenticator("username", "password")
};
var client = new RestClient(options);

var request = new RestRequest() { Method = Method.Post, RequestFormat = DataFormat.Json };
request.AddParameter("Content-Type", "multipart/form-data", ParameterType.RequestBody);

using (MultipartFormDataContent formDataContent = new MultipartFormDataContent())
{
    KeyValuePair<string, string>[] keyValuePairs = new[]
    {
        new KeyValuePair<string, string>("message", message),
        new KeyValuePair<string, string>("queue-name", "notification")
    };
    foreach (var keyValuePair in keyValuePairs)
    {
        request.AddParameter(keyValuePair.Value, keyValuePair.Key);
    }
}

var response = await client.ExecuteAsync(request);

问题分析

  1. 参数顺序完全错误:request.AddParameter的标准参数顺序是(字段名, 值),但代码里写反成了(值, 字段名),导致API收到的字段名和内容完全错位,无法识别JSON格式的message值。
  2. 错误设置请求格式:RequestFormat = DataFormat.Json会强制RestSharp按JSON格式处理请求体,和form-data的提交需求冲突。
  3. 手动设置Content-Type冗余且错误:RestSharp处理form-data请求时会自动生成正确的multipart/form-data请求头,手动添加反而会破坏请求结构。
  4. 冗余代码:实例化了MultipartFormDataContent但未实际使用,属于无效代码。

修正后的代码

SendingRequestModel requestModel = new SendingRequestModel();

requestModel.Id = "1111111";
requestModel.Message = "something";
requestModel.Description= "something";

string message = JsonSerializer.Serialize(requestModel);

var serviceSettings = appSettings.ServiceSettings;

var options = new RestClientOptions(serviceSettings.ServiceUrl)
{
    Authenticator = new HttpBasicAuthenticator("username", "password")
};
var client = new RestClient(options);

// 无需设置RequestFormat,RestSharp会自动处理form-data类型
var request = new RestRequest() { Method = Method.Post };

// 按正确顺序添加form-data字段:(字段名, 值)
request.AddParameter("message", message);
request.AddParameter("queue-name", "notification");

var response = await client.ExecuteAsync(request);

如果API要求message字段的JSON需明确标注媒体类型,可改用AddStringBody:

request.AddStringBody(message, "application/json");
request.AddParameter("queue-name", "notification");

请求相关截图

请求截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:21:15