I want to POST an empty javascript array []
to webAPI and have it create an empty list of integers. I also want it so if I post javascript null
to webAPI that it assigns null to the list of integers.
JS:
var intArray = [];
$.ajax({
type: 'POST',
url: '/api/ListOfInts',
data: {'' : intArray},
dataType: 'json'
});
c# webapi
[HttpPost]
public void ListOfInts([FromBody]List<int> input)
Problem 1) Jquery refuses to send data {'' : []}
as the post payload. As soon as I add something in the array it works such as {'' : [1,2,3]}
Problem 2) Passing empty js array to controller gives null Based on what i read even if I do get it to post an empty array, it will initialize the list as null. Discussed solutions have it so that the list is always initializes as empty but I don't want that. I want it to be null in some case (when null/undefined is sent to it) and when []
is sent it should initialize as empty.
Edit: See https://www.asp.net/web-api/overview/advanced/sending-html-form-data-part-1 about why I am using {'' : []}
-
Have you tried to send just data: intArray ?Aleksey L.– Aleksey L.2016年06月08日 05:34:14 +00:00Commented Jun 8, 2016 at 5:34
-
Yes, it doesnt work at all. WebAPI doesnt know how to handle itLearningJrDev– LearningJrDev2016年06月09日 14:58:00 +00:00Commented Jun 9, 2016 at 14:58
-
In WebApi, differentiating between null and empty in a request can be difficult. If you are using those to somehow set some sort of "state" in your application, I would rethink how you are doing it. Possibly sending some sort of flag or something that will properly initialize your list on the server.jensendp– jensendp2016年06月17日 14:56:43 +00:00Commented Jun 17, 2016 at 14:56
3 Answers 3
Use JSON.stringify(intArray)
and contentType: 'application/json'
works for me:
$.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])
});
Comments
data: {'' : intArray},
a blank key name is not allowed in JSON.
Just send the array itself.
data: intArray,
2 Comments
1. Use JSON.stringify() to convert javascript object to JSON string.
2. Use contentType: 'application/json' as it is correct MIME media type for JSON. What is the correct JSON content type?
3 dataType is not necessary
data: JSON.stringify(intArray), contentType: 'application/json'
Comments
Explore related questions
See similar questions with these tags.