首页 > 解决方案 > 带有参数的 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`!
}

标签: javascriptc#jqueryasp.nethttp-get

解决方案


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 中的网络选项卡:

在此处输入图像描述

在此处输入图像描述

我希望这有帮助!


推荐阅读