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

.Net Core C#中使用HttpClient发送POST请求时如何添加参数

问题:使用HttpClient调用仅支持POST的API传递参数

调用目标API时遇到问题,该API仅支持POST请求,签名如下:

//It takes post call only
public string Authentication(string UN, string AP)

需要为请求传递UN和AP两个参数,希望获取使用HttpClient发起调用的实现方法。

已有的Startup.cs配置:

services.AddHttpClient("Authentication", APIHttpClient =>
{
    APIHttpClient.BaseAddress = new Uri("Target API address");
}).ConfigurePrimaryHttpMessageHandler(() =>
    new HttpClientHandler
    {
        UseCookies = false
    }
);

服务类代码:

public class MyService 
{
   private IHttpClientFactory _clientFactory;

   public MyService(IHttpClientFactory httpClientFactory){
       _clientFactory = httpClientFactory;
   }

   public MyMethod(){

       HttpClient httpClient = _clientFactory.CreateClient("Authentication");
       
       // I need to add parameter here
   }
}

解决方案

API接收参数的常见格式有两种,以下分别给出对应实现:

情况1:API接收表单格式参数

如果API期望参数以application/x-www-form-urlencoded格式传递,使用FormUrlEncodedContent构造请求内容:

// 建议改为异步方法,遵循.NET HttpClient最佳实践
public async Task<string> MyMethod()
{
    HttpClient httpClient = _clientFactory.CreateClient("Authentication");
    
    // 构造表单参数集合
    var parameters = new Dictionary<string, string>
    {
        { "UN", "你的UN参数值" },
        { "AP", "你的AP参数值" }
    };
    var content = new FormUrlEncodedContent(parameters);
    
    // 发送POST请求,路径为API的相对地址,需根据实际路由调整
    var response = await httpClient.PostAsync("Authentication", content);
    
    // 校验请求是否成功,失败则抛出异常
    response.EnsureSuccessStatusCode();
    
    // 读取API返回的字符串结果
    return await response.Content.ReadAsStringAsync();
}

情况2:API接收JSON格式参数

如果API期望参数以application/json格式传递,使用StringContent配合JSON序列化构造请求内容(以下示例使用.NET内置的System.Text.Json):

using System.Text.Json;

public async Task<string> MyMethod()
{
    HttpClient httpClient = _clientFactory.CreateClient("Authentication");
    
    // 构造参数匿名对象
    var authParams = new { UN = "你的UN参数值", AP = "你的AP参数值" };
    var jsonString = JsonSerializer.Serialize(authParams);
    var content = new StringContent(jsonString, System.Text.Encoding.UTF8, "application/json");
    
    // 发送POST请求
    var response = await httpClient.PostAsync("Authentication", content);
    
    response.EnsureSuccessStatusCode();
    
    return await response.Content.ReadAsStringAsync();
}

关键注意事项

  • 务必将方法改为异步形式(返回Task<T>),避免同步阻塞线程。
  • PostAsync中的路径需根据API实际路由调整,若BaseAddress已包含完整前缀,此处仅需填写相对路径。
  • 若API有特殊的响应格式或额外认证要求,需根据实际场景调整处理逻辑。

内容的提问来源于stack exchange,提问作者qixin liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:16:26