【问题标题】:jQuery GET with parameters always null on server side带有参数的 jQuery GET 在服务器端始终为空
【发布时间】:2020-03-20 00:11:53
【问题描述】:

我不知道我错过了什么。

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

【问题讨论】:

    标签: javascript c# jquery asp.net http-get


    【解决方案1】:

    您获得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] 的文档中,您可以阅读以下内容:

    要强制 Web API 从请求正文中读取简单类型,请将 [FromBody] 属性添加到参数中。

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

    我希望这会有所帮助!

    【讨论】:

    • 这很有帮助。谢谢。再澄清一点。我应该只在post 调用上定义dataTypecontentType?如果我想使用一个对象作为GET 的参数怎么办。像object = {param1: 1, param2: 2} 这样的东西。然后它将是data: {paramObject: object} 和服务器端MethodName(ObjectType paramObject)。对吗?
    • 在这种情况下,我会使用POST 请求发送数据并定义类型。如果您有更多兴趣,请找到这个答案,这解释了有关复杂对象的更多信息:stackoverflow.com/questions/24874490/…
    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多