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

使用HttpClient无法调用API控制器PUT接口的问题排查

HttpClient调用API接口返回400错误的问题与解决

我正在通过HttpClient实现API与Web应用之间的通信,但调用接口时返回400 Bad Request,无法正常触发控制器方法。

API控制器代码

[HttpPut, Route("voipport/{newPort}")]
public async Task<IActionResult> PutVoipPort(int newPort)
{
    try
    {
        await _repository.ChangePort(newPort);
        await _repository.AddNewRecord("PutVoipPort", "Success");
        return Ok();
    }
    catch(Exception exception)
    {
        return BadRequest(exception.Message);
    }
}

原客户端调用代码

public async Task VOIPChangePort(int newPort)
{
    var json = JsonConvert.SerializeObject(newPort);
    var data = new StringContent(json,Encoding.UTF8,"application/json");
    var result = await _httpClient.PutAsync("voipport/{newPort}", data);
    result.EnsureSuccessStatusCode();
    Console.WriteLine(result);
}

请求返回的错误结果

{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Date: Fri, 25 Nov 2022 18:15:08 GMT
  Server: Kestrel
  Transfer-Encoding: chunked
  Content-Type: application/problem+json; charset=utf-8
}}

问题原因分析

  1. 路由参数未正确替换:原客户端代码中使用了字符串字面量"voipport/{newPort}",没有将变量newPort的实际值注入到URL中,导致请求的路径是无效的voipport/{newPort},无法匹配控制器的路由规则。
  2. 多余的请求体传递:控制器方法的newPort参数是从路由中获取的,不需要传递JSON格式的请求体。传递请求体后,模型绑定过程无法正确解析参数,进而返回400错误。

解决方案代码

public async Task VOIPChangePort(int newPort)
{
    var result = await _httpClient.PutAsync($"voipport/{newPort}", null);
    result.EnsureSuccessStatusCode();
}

内容的提问来源于stack exchange,提问作者Software Architect

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:10:45