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

.NET Core中Ajax调用Controller时username参数为null的问题求助

解决.NET Core Ajax传参Controller获取null的问题

问题原因

你当前的Ajax请求是以application/json格式发送JSON对象,但.NET Core默认不会从请求体中解析单个简单类型参数(比如string),需要显式声明或者调整传参方式。

方案一:后端添加[FromBody]并使用DTO接收(推荐)

由于你前端传递的是包含username属性的JSON对象,最规范的做法是创建一个DTO类来接收参数,同时给参数加上[FromBody]特性,告诉框架从请求体中解析数据:

  1. 创建请求DTO类:
public class UserQueryRequest
{
    public string Username { get; set; }
}
  1. 修改HomeController的Users方法:
public JsonResult Users([FromBody] UserQueryRequest request)
{
    // 此时request.Username即可获取到前端传入的值
    List<User> Users = new List<User>()
    {
        new User { Id = 1, Name = "John Doe", Age = 30 },
        new User { Id = 2, Name = "Jane Doe", Age = 25 },
        new User { Id = 3, Name = "Sammy Doe", Age = 22 }   
    };
    return Json(Users);
}

前端代码保持不变即可,因为你已经正确设置了contentType: "application/json; charset=utf-8"并使用JSON.stringify处理数据。

方案二:调整前端传参格式(无需修改后端)

如果不想创建DTO,可以改为发送表单格式的数据,此时后端无需修改就能直接获取参数:

修改前端Ajax代码:

$(document).ready(function () {
    $("#btnMe").click(function () {
        $.ajax({
            type: "POST",
            url: "HOME/Users",
            data: { username: $("#username").val() }, // 直接传对象,不用JSON.stringify
            dataType: "json",
            success: function (response) {
                $(response).each(function (index, item) {
                    console.log(item);
                });
            }
        });
    });
});

这种方式下,jQuery会自动将数据编码为application/x-www-form-urlencoded格式,.NET Core默认会从表单数据中解析简单类型参数,所以username参数能正常获取到值。

额外说明

如果一定要用[FromBody]接收单个string类型参数,需要前端直接传递字符串的JSON格式,而不是对象:

data: JSON.stringify($("#username").val()),

同时后端方法改为:

public JsonResult Users([FromBody] string username)
{
    // ... 逻辑不变
}

但这种方式不如使用DTO灵活,后续扩展参数会更麻烦,因此更推荐方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:05:59