使用Ajax传递JSON至ASP.NET Core控制器时数据全部为空的问题
解决Ajax传JSON到ASP.NET Core控制器参数为空的问题
问题原因
当你以application/json格式发送JSON请求体时,ASP.NET Core默认不会自动将JSON中的属性映射到Action的单个参数上,必须通过模型绑定或者调整请求编码方式来实现数据接收。
解决方案
方案一:用DTO模型接收JSON数据
这是最规范的做法,适合复杂参数场景:
- 定义匹配JSON结构的模型类:
public class PrivateChatRequest { public int Id { get; set; } public string Username { get; set; } public string ConnectionID { get; set; } }
- 修改控制器Action,添加
[FromBody]特性绑定模型:
public IActionResult PrivateChat([FromBody] PrivateChatRequest request) { // 此时request.Id、request.Username、request.ConnectionID可正常获取传入值 }
你的Ajax代码不需要修改,保持当前的JSON.stringify和contentType配置即可。
方案二:调整Ajax请求为表单编码格式
如果不想创建模型类,可以修改Ajax配置,改用表单编码传递数据:
function AjaxPost(url, data) { $.ajax({ url: url, type: 'POST', // 移除JSON相关配置,默认使用application/x-www-form-urlencoded data: data, // 直接传递对象,无需JSON序列化 success: function (response) { //成功回调代码 }, error: function (err) { console.error(err); } }); }
此时原控制器的单个参数可以直接接收到值,无需修改Action代码。
内容的提问来源于stack exchange,提问作者ym733
相关产品推荐
相关产品推荐

