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

C#如何向带有多个[FromForm]参数的HttpPost接口发送数据

结论

你目前编写的实现完全错误,无法正常调用目标接口。

错误原因

目标接口的两个入参都标记了[FromForm]特性,说明该接口要求接收**表单格式(x-www-form-urlencoded / form-data)**的请求数据,你的代码存在两个完全不匹配的问题:

  • 将参数序列化为了JSON字符串
  • 把请求Content-Type设置为了application/json
    接口会因为无法从表单中读取到对应参数,直接返回400 Bad Request错误。

正确封装&发送实现

方案1:使用FormUrlEncodedContent(适配当前无文件上传的简单表单场景)

using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;

// 注意:HttpClient建议做成单例复用,不要每次请求都新建实例
private static readonly HttpClient _httpClient = new HttpClient();

public async Task MyMethod(string name, string uri)
{
    // 构造表单键值对集合
    var formData = new Dictionary<string, string>
    {
        {"name", name},
        {"uri", uri}
    };

    // 封装为表单格式的请求内容
    using var content = new FormUrlEncodedContent(formData);
    
    // 发送Post请求,替换为你实际的接口域名
    var response = await _httpClient.PostAsync("https://你的接口域名/DoWork", content);
    
    // 按需处理响应结果
    response.EnsureSuccessStatusCode();
    var result = await response.Content.ReadAsStringAsync();
}

方案2:兼容文件上传的复杂表单场景,使用MultipartFormDataContent

public async Task MyMethodWithFile(string name, string uri, Stream fileStream = null, string fileName = null)
{
    using var content = new MultipartFormDataContent();
    // 添加字符串类型的表单参数
    content.Add(new StringContent(name), "name");
    content.Add(new StringContent(uri), "uri");
    
    // 有文件时附加文件参数
    if (fileStream != null)
    {
        content.Add(new StreamContent(fileStream), "uploadFile", fileName);
    }

    var response = await _httpClient.PostAsync("https://你的接口域名/DoWork", content);
    response.EnsureSuccessStatusCode();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:57:02