c# - 在 C# HttpClient 中发送表单数据
问题描述
您好,我正在使用 C# HttpClient 从 api 中提取数据。我需要使用 post 方法以表单数据形式提取数据。我写了下面的代码,但得到了一个空的响应。我该怎么做?
var client = new HttpClient();
client.Timeout = TimeSpan.FromSeconds(300);
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var request = new HttpRequestMessage();
request.Method = HttpMethod.Post;
request.RequestUri = new Uri("https://myapi.com");
var content = new MultipartFormDataContent();
var dataContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("value1", "myvalue1"),
new KeyValuePair<string, string>("value2", "myvalue2"),
new KeyValuePair<string, string>("value3", "myvalue3")
});
content.Add(dataContent);
request.Content = content;
var header = new ContentDispositionHeaderValue("form-data");
request.Content.Headers.ContentDisposition = header;
var response = await client.PostAsync(request.RequestUri.ToString(), request.Content);
var result = response.Content.ReadAsStringAsync().Result;
解决方案
您正在使用不正确的方式发送数据FormUrlEncodedContent
。要将参数作为MultipartFormDataContent
字符串值发送,您需要替换下面的代码
var dataContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("value1", "myvalue1"),
new KeyValuePair<string, string>("value2", "myvalue2"),
new KeyValuePair<string, string>("value3", "myvalue3")
});
有了这个:
content.Add(new StringContent("myvalue1"), "value1");
content.Add(new StringContent("myvalue2"), "value2");
content.Add(new StringContent("myvalue3"), "value3");
推荐阅读
- c# - C# - 如何将 4 位和 12 位放入 2 个字节
- json - Flutter Firebase 加载大型 JSON 配置文件的最佳方式
- java - SpringBoot JPA 关系 - 如果对象存在,则防止创建新实体,而是返回已经存在的对象
- php - PHP中有没有办法计算函数体的校验和?
- android - 如何使用 Shared Preference 保存编辑文本中的数据并将其显示在另一个 Activity 的 ListView 上?
- typescript - 每个属性的带有前缀的映射类型
- javascript - jquery:如何松开焦点使其再次触发?
- google-bigquery - 将对象元数据(如创建者和日期)与谷歌云存储中的对象一起插入到 BigQuery
- python - 如何将 2d 数组附加到 3d 数组?
- sql - PostgreSQL选择具有多个条件的记录