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

.NET 6中Http PostAsync请求400错误排查求助

问题诊断与解决方案

错误原因

400 Bad Request的核心原因是ASP.NET Core的参数绑定规则:对于string这类简单类型,框架默认优先从URL的查询字符串或路由参数中获取值,不会自动读取请求Body中的内容。你的客户端将数据放在请求Body里发送,但服务端参数未指定来源,导致框架无法匹配到参数值,从而返回400错误。

解决方案(三种可选)

方案1:指定参数从Body读取(推荐JSON格式)

给服务端参数添加[FromBody]特性,明确告知框架从请求Body读取参数;同时客户端需将内容格式化为标准JSON(字符串需包裹双引号),并设置正确的Content-Type。

服务端代码:

[Route("api/[controller]")]
[ApiController]
public class UtilisateurController : Controller
{
    [HttpPost("AjouterUtilisateur1")]
    public ActionResult<string> AjouterUtilisateur1([FromBody] string jsonArgs)       
    { 
        // 业务逻辑实现
        return Ok(jsonArgs);
    }
}

客户端代码:

// 字符串需包裹双引号以符合JSON格式要求
string jsonContent = "\"MaChaine\"";
HttpContent httpContent1 = new StringContent(jsonContent, Encoding.UTF8, "application/json");
HttpResponseMessage response1 = await client.PostAsync("http://localhost:6000/api/Utilisateur/AjouterUtilisateur1", httpContent1);

方案2:使用表单格式传递参数

若不想使用JSON格式,可通过表单形式发送数据,服务端指定从表单读取参数。

服务端代码:

[Route("api/[controller]")]
[ApiController]
public class UtilisateurController : Controller
{
    [HttpPost("AjouterUtilisateur1")]
    public ActionResult<string> AjouterUtilisateur1([FromForm] string jsonArgs)       
    { 
        // 业务逻辑实现
        return Ok(jsonArgs);
    }
}

客户端代码:

// 构建表单键值对内容
var formData = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("jsonArgs", "MaChaine")
});
HttpResponseMessage response1 = await client.PostAsync("http://localhost:6000/api/Utilisateur/AjouterUtilisateur1", formData);

方案3:延续路由参数传递方式(类似原Get请求)

如果想保持和原Get请求一致的参数传递逻辑,Post请求也可将参数放在路由中,无需修改URL拼接逻辑,仅需替换请求方法。

服务端代码:

[Route("api/[controller]")]
[ApiController]
public class UtilisateurController : Controller
{
    [HttpPost("AjouterUtilisateur1/{jsonArgs}")]
    public ActionResult<string> AjouterUtilisateur1(string jsonArgs)       
    { 
        // 业务逻辑实现
        return Ok(jsonArgs);
    }
}

客户端代码:

// 保持原URL格式,使用PostAsync发送请求
HttpResponseMessage response1 = await client.PostAsync("http://localhost:6000/api/Utilisateur/AjouterUtilisateur1/MaChaine", null);

验证建议

可先用Postman或Swagger直接测试服务端接口,确认接口能正常接收参数后,再调试客户端代码,便于快速定位问题。

内容的提问来源于stack exchange,提问作者Philippe Lambert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:45:32