2016-06-07 190 views
7

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

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/undefined时),并且当发送[]时,它应该初始化为空。

编辑:为什么我使用{'' : []}

+0

您是否尝试过只发送数据:intArray? –

+0

是的,它根本不起作用。 WebAPI不知道如何处理它 – LearningJrDev

+0

在WebApi中,区分请求中的null和empty可能很困难。如果你正在使用这些在你的应用程序中设置某种“状态”,我会重新思考你是如何做到的。可能发送某种标志或某种东西,以便在服务器上正确初始化您的列表。 – jensendp

回答

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.使用JSON.stringify()将JavaScript对象转换为JSON字符串。

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

数据类型是没有必要的

数据:JSON.stringify(intArray), 的contentType: '应用/ JSON的'