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

Blazor中HttpClient.PostAsJsonAsync调用返回400错误问题

问题原因与解决方案

核心问题

你遇到的400 Bad Request错误,根源是ASP.NET Core模型绑定规则:对于string这类简单类型的Action参数,框架默认会从查询字符串、路由值或表单数据中读取,而不会自动解析请求体中的JSON字符串。你用PostAsJsonAsync发送的字符串是放在请求体里的,导致框架无法匹配到参数,因此返回400错误。

解决方案一:添加[FromBody]特性(推荐)

修改WeatherForecastController中的Post方法,给参数加上[FromBody]特性,明确告诉框架从请求体中绑定该参数:

[HttpPost]
public async Task<ActionResult> Post([FromBody] string str)
{
    return Ok();
}

修改后再调用PostAsJsonAsync就能正常匹配参数,不会返回400错误。同理,Put方法也需要给对应的简单类型参数添加[FromBody]特性。

解决方案二:通过查询字符串传递参数

如果不想修改Controller代码,可以把字符串参数放在查询字符串中传递,此时框架能自动绑定参数:

var reply = await Http.PostAsync("WeatherForecast?str=test the west", null);

这种方式适合短字符串,长字符串不推荐使用,因为查询字符串有长度限制。

为什么Get请求正常?

你的GetFromJsonAsync调用正常,是因为WeatherForecast的Get接口参数(如果有的话)是从路由或查询字符串获取的,符合框架默认的模型绑定规则,所以能正确匹配。

内容的提问来源于stack exchange,提问作者Petteri Fischer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:16:12