将空数组发送到webapi

时间:2016-06-07 20:28:47

标签: javascript c# jquery asp.net asp.net-web-api

我想将一个空的javascript数组[]发布到webAPI,并让它创建一个空的整数列表。我也想要它,所以如果我将javascript null发布到webAPI,它会将null分配给整数列表。

JS:

var intArray = [];
$.ajax({
    type: 'POST',
    url: '/api/ListOfInts',
    data: {'' : intArray},
    dataType: 'json'
});

c#webapi

[HttpPost]
public void ListOfInts([FromBody]List<int> input)

问题1)Jquery拒绝发送数据{'' : []}作为后有效负载。只要我在数组中添加了一些内容,就可以使用{'' : [1,2,3]}

问题2)Passing empty js array to controller gives null根据我读到的内容,即使我确实发布了一个空数组,它也会将列表初始化为null。讨论的解决方案有它,所以列表总是初始化为空,但我不希望这样。我希望它在某些情况下为null(当发送null / undefined时),并且当发送[]时,它应该初始化为空。

修改:请参阅https://www.asp.net/web-api/overview/advanced/sending-html-form-data-part-1了解我使用{'' : []}

的原因

3 个答案:

答案 0 :(得分:21)

使用JSON.stringify(intArray)contentType: 'application/json'对我有用:

$.ajax({
     url: "/api/values",
     method: "POST",
     contentType: 'application/json',
     data: JSON.stringify([])
});

enter image description here

$.ajax({
     url: "/api/values",
     method: "POST",
     contentType: 'application/json',
     data: null
});

enter image description here

$.ajax({
      url: "/api/values",
      method: "POST",
      contentType: 'application/json',
      data: JSON.stringify([1, 2, 3])
});

enter image description here

答案 1 :(得分:1)

data: {'' : intArray},

JSON中不允许使用空白键名称。

只需发送数组本身。

data: intArray,

答案 2 :(得分:1)

1。使用JSON.stringify()将javascript对象转换为JSON字符串。

2。使用contentType:&#39; application / json&#39;因为它是JSON的正确MIME媒体类型。 What is the correct JSON content type?

3 dataType不是必需的

数据:JSON.stringify(intArray), contentType :&#39; application / json&#39;