javascript - 带有参数的 jQuery GET 在服务器端始终为空
问题描述
我不知道我错过了什么。
传递复杂的自定义对象时一切正常,但是当我尝试传递简单的 int 或字符串时,我得到null
这是客户端的ajax调用:
var id = 1;
$.ajax({
type: "GET",
url: "/api/APICalls/MethodName",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(id), // or JSON.stringify({id: id}) or just id
dataType: "json",
success: function (data) {
console.log(data);
},
error: function (data) {
alert(data.responseText);
}
});
在服务器端,方法如下:
[HttpGet]
public void MethodName([FromBody] string id)
{
// Do something with id... Doesn't matter... It is `null`!
}
解决方案
null
您获得参数值的原因id
是[FromBody]
. 从技术上讲,当您向GET
服务器发送请求时,jQuery
数据会显示在查询参数中,而不是请求正文中。
您需要在后端做的只是删除[FromBody]
如下:
[HttpGet]
public void MethodName(string id)
{
// Now you should be able to access the value of id
}
从客户端发送数据如下:
var id = 1;
$.ajax({
url: '/api/APICalls/MethodName',
type: 'GET',
data: {id: id},
success: function (data) {
console.log(data);
},
error: function (err) {
console.error(err);
}
});
从文档中[FormBody]
您可以阅读以下内容:
要强制 Web API 从请求正文中读取简单类型,请将
[FromBody]
属性添加到参数中。
您的数据显示在查询字符串中,检查 Chrome 中的网络选项卡:
我希望这有帮助!
推荐阅读
- regex - 传递项目 ID 时 cloudbuild.yaml 文件中的正则表达式错误
- html - 在 material-ui v5 中应用全局样式的最佳方法是什么?
- javascript - 我可以在条带元素中填充保存的卡片值吗?
- python - 使用 Python 从 JavaScript 中的 base64 格式文本中查找 url
- python - 在 Django 序列化程序中显示多对多关系的额外字段
- pandas - 基于 python 中的多个特征的训练测试拆分的分层交叉验证或采样
- node.js - 为什么 'npm start' 不能在带有 Node server.js 端口 :::3131 的浏览器中运行项目?(JavaScript 项目)
- python - “typed=False”是什么意思?
- unix - 如何根据 Unix 中特定字段的特定字符过滤数据?
- keyboard - Arch Linux 安装键盘布局 de-latin1 在 /etc/vconsole.conf