【问题标题】:jQuery AJAX post data is null in c# web api controllerc# web api控制器中的jQuery AJAX发布数据为空
【发布时间】:2016-12-13 06:29:40
【问题描述】:

我正在使用以下调用向c# web api controller 发送数据。

$.ajax({
    type: "POST",
    url: "menuApi/menu/Cost",
    data: JSON.stringify(order),
    contentType: "application/json",
    success: function (data) { window.alert('done')},
    dataType: 'json'
});

服务器端的c# controller是这样的:

public string Cost([FromBody] string order)
{
    var sOrder = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(order);

    return "";
}

Javascript 中的订单对象是一个具有嵌套数组和属性的复杂对象。我将数据设为空。我不确定如何通过 ajax 调用发送订单。

编辑:这是我的订单对象

var order = {
    name:"",
    id:"",
    cost:"",
    details: {
        sItem:[{name:"",cost:""}], 
        dItem:[{name:"",cost:"", components:[{name:"",quantity:""}]}]
    }
}

【问题讨论】:

  • 请显示order的定义
  • 尝试使用:application/json; charset=utf-8
  • 尝试使用对象而不是字符串作为操作的参数。 MVC 的映射功能应该发挥作用
  • 它不是一个 mvc 应用程序。我刚刚在简单的 asp.net 项目中添加了 web api
  • @MichalHainc 尝试过,但没有任何改变。

标签: javascript c# jquery ajax


【解决方案1】:

知道了,您需要将 ajax 请求作为表单数据发布,参数/表单字段名称为空,如下所示:

    var order = {
        name: "",
        id: "",
        cost: "",
        details: {
            sItem: [{ name: "", cost: "" }],
            dItem: [{ name: "", cost: "", components: [{ name: "", quantity: "" }] }]
        }
    };
    $.ajax({
        type: "POST",
        url: "api/Values",
        data: {'': JSON.stringify(order)} ,
        success: function (data) { window.alert('done') },            
    });

【讨论】:

  • 它不适合我。我面临的唯一问题是,当实际对象(一个复杂的嵌套数组对象)时,我得到的数据为空。即使我用 orderStr = "Hello"; 尝试了你的例子$.ajax({ type: "POST", url: "menuApi/menu/Cost", data: { '': orderStr }, contentType: "application/json; charset=utf-8", success: function (data) { window.alert('done')}, });
  • 好吧,我试试 1:1
  • 是的,我没注意contentType。是的,它现在正在工作
  • 这太棒了。想不出用空参数试试。仍然不知道为什么它现在工作的机制,但它正在工作。
【解决方案2】:

模型绑定器已经为您完成了,无需反序列化。您只需要将参数类型更改为objectdynamic。剩下的就是考虑删除多余的处理:

    public string Cost([FromBody] object order)
    {
        var sOrder = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(order.ToString());

        return "";
    }

【讨论】:

  • 这里没有自动完成。它不是 MVC 项目。我添加了一个 web api 并从 ajax 调用中调用它。
猜你喜欢
  • 2021-10-08
  • 1970-01-01
  • 2014-08-29
  • 2012-08-16
  • 2014-01-22
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
相关资源
最近更新 更多