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

ASP.NET Core Razor Pages:Ajax请求Body在控制器方法中为何为null?

问题原因及解决方法

原因

你前端发送的是JSON对象({ Min: testvariable, Max: "no" }序列化后的JSON结构),但后端用[FromBody]string input接收时,ASP.NET Core的模型绑定系统无法将JSON对象直接解析为string类型,因此input始终为null。

解决方案

推荐使用实体类接收JSON数据,这是ASP.NET Core处理JSON请求体的标准方式:

  1. 定义与前端JSON结构匹配的实体类:
public class NumberRequest
{
    // 根据testvariable的实际类型调整(比如是字符串就用string)
    public int Min { get; set; }
    public string Max { get; set; }
}
  1. 修改控制器方法,用该实体类作为参数:
public IActionResult OnPostRandomNumber([FromBody] NumberRequest input)
{
    // 现在可以正常获取Min和Max的值
    return new JsonResult($"input: Min={input.Min}, Max={input.Max}");
}

如果非要用string接收(不推荐),需要前端将JSON对象双重序列化,把JSON对象先转成字符串再序列化一次:

$.ajax({
    type: 'POST',
    url: "/Jobs/Sprachen/?handler=RandomNumber",
    // 双重JSON.stringify,把对象转成字符串后再序列化
    data: JSON.stringify(JSON.stringify({ Min: testvariable, Max: "no" })),
    contentType: "application/json",
    dataType: "json",
}).done(function (data) {
    console.log(data);
})
.fail(function (error) {
    //nothing for now
});

这种方式会让后端接收到一个JSON格式的字符串(比如"{\"Min\":10,\"Max\":\"no\"}"),需要你手动反序列化才能拿到数据,不如实体类方式简洁直观。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:47:10