我想将一个空的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了解我使用{'' : []}
答案 0 :(得分:21)
使用JSON.stringify(intArray)
和contentType: 'application/json'
对我有用:
$.ajax({
url: "/api/values",
method: "POST",
contentType: 'application/json',
data: JSON.stringify([])
});
$.ajax({
url: "/api/values",
method: "POST",
contentType: 'application/json',
data: null
});
$.ajax({
url: "/api/values",
method: "POST",
contentType: 'application/json',
data: JSON.stringify([1, 2, 3])
});
答案 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;