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

ASP.NET Core 3.1中Ajax绑定原始类型参数失败的解决方案咨询

解决方案:ASP.NET Core 3.1中Axios POST请求参数绑定失败问题

这个问题我之前在项目里也踩过坑,核心原因是ASP.NET Core的[FromBody]属性对简单类型(如string、int)和复杂对象的绑定逻辑不一样:

当你用Axios发送{ abc: 123 }时,请求体是一个JSON对象,但[FromBody]string abc期望的是纯字符串格式的请求体(比如直接发送"123"),而不是嵌套在对象中的值,所以导致绑定失效。

下面给你三种可行的解决方案,按推荐程度排序:


方案1:使用DTO类接收请求参数(推荐)

这是最规范、扩展性最好的方式,尤其适合后续可能增加参数的场景。

首先创建一个用于接收请求的DTO类:

public class TestRequestDto
{
    public string Abc { get; set; }
}

然后修改Controller的Action方法,用这个DTO类接收参数:

[HttpPost]
public IActionResult Test([FromBody]TestRequestDto request)
{
    return Json(new { request.Abc });
}

你的Axios请求代码不需要任何修改,ASP.NET Core会自动将JSON对象解析到DTO的对应属性上。


方案2:修改Axios请求,发送纯字符串请求体

如果你不想创建额外的DTO类,可以调整Axios的请求体,直接发送纯字符串而非对象:

axios({
  url: '/home/test',
  method: 'post',
  data: "123", // 直接传入字符串值,而非对象
  headers: {
    'Content-Type': 'application/json' // 保持JSON类型头,框架能正确解析纯字符串
  }
})
.then(function (response) {
  console.log(response);
})
.catch(function (error) {
  console.log(error);
});

此时你的Action方法可以保持[FromBody]string abc的写法,参数能正常绑定。


方案3:用JObject/JsonElement直接解析JSON对象

如果只是临时场景,也可以直接用JSON对象类型接收,手动提取参数:

方式A:使用Newtonsoft.Json的JObject

(ASP.NET Core 3.1默认可能需要安装Newtonsoft.Json NuGet包)

using Newtonsoft.Json.Linq;

[HttpPost]
public IActionResult Test([FromBody]JObject request)
{
    string abc = request["abc"]?.ToString();
    return Json(new { abc });
}

方式B:使用System.Text.Json的JsonElement

(ASP.NET Core 3.1默认内置System.Text.Json)

using System.Text.Json;

[HttpPost]
public IActionResult Test([FromBody]JsonElement request)
{
    string abc = request.GetProperty("abc").GetString();
    return Json(new { abc });
}

内容的提问来源于stack exchange,提问作者Nick Money

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:37:35