jQuery GET 参数在服务器端始终为空

jQuery GET with parameters always null on server side

我不知道我错过了什么。

传递复杂的自定义对象时一切正常,但当我尝试传递简单的 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`!
}

id 参数得到 null 值的原因是 [FromBody]。从技术上讲,当您使用 jQuery 向服务器发送 GET 请求时,数据显示在查询参数中而不是请求正文中。

你需要在后端做的只是删除 [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] 的文档中,您可以阅读以下内容:

To force Web API to read a simple type from the request body, add the [FromBody] attribute to the parameter.

您的数据显示在查询字符串中,请检查 Chrome 中的网络选项卡:

希望对您有所帮助!