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
相关产品推荐
相关产品推荐

