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

HttpClient PostAsJsonAsync请求后控制器模型值异常,无需修改控制器的解决办法

解决方案

问题根源在于:PostAsJsonAsync会将模型序列化为JSON格式并放入请求Body中,但你的控制器方法未添加[FromBody]特性,ASP.NET Core默认会尝试从**表单数据(application/x-www-form-urlencoded)**中绑定复杂类型参数,因此JSON格式的数据无法被正确解析。

要在不修改控制器代码的前提下解决这个问题,只需要将HttpClient的请求格式改为表单数据即可:

var uri = new Uri("http://localhost:5075/Agent/ChangeAgent");

var model = new ChangeAgentRequestViewModel
{
    Address = "test",
    AgentType = 1,
};

// 将模型属性转换为表单键值对
var formData = new Dictionary<string, string>
{
    { nameof(model.Address), model.Address },
    { nameof(model.AgentType), model.AgentType.ToString() }
};

// 创建表单格式的请求内容
var content = new FormUrlEncodedContent(formData);

// 发送POST请求
var response = await _httpClient.PostAsync(uri, content);

如果你的模型属性较多,也可以通过反射自动生成表单键值对,避免手动编写:

var formData = new Dictionary<string, string>();
foreach (var prop in typeof(ChangeAgentRequestViewModel).GetProperties())
{
    var value = prop.GetValue(model)?.ToString();
    if (value != null)
    {
        formData.Add(prop.Name, value);
    }
}
var content = new FormUrlEncodedContent(formData);

这样发送的请求会使用application/x-www-form-urlencoded格式,和控制器当前兼容的绑定逻辑匹配,无需修改控制器代码就能正确获取到Address和AgentType的值。

内容的提问来源于stack exchange,提问作者Ali Eshghi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:07:20