2016-06-07 21 views
7

Voglio POSTARE un array javascript vuoto [] a webAPI e fargli creare un elenco vuoto di numeri interi. Lo voglio anche se inserisco javascript null in webAPI che assegna null all'elenco di interi.Invio di array vuoto a webapi

JS:

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

C# WebAPI

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

Problema 1) Jquery rifiuta di inviare i dati {'' : []} come il post payload. Non appena aggiungo qualcosa nell'array funziona come {'' : [1,2,3]}

Problema 2) Passing empty js array to controller gives null In base a ciò che leggo anche se ottengo di pubblicare un array vuoto, inizializzerà l'elenco come null. Le soluzioni discusse lo fanno in modo che l'elenco sia sempre inizializzato come vuoto ma non lo voglio. Voglio che sia null in alcuni casi (quando viene inviato un valore null/undefined) e quando viene inviato [] dovrebbe inizializzarsi come vuoto.

Edit: Vedere https://www.asp.net/web-api/overview/advanced/sending-html-form-data-part-1 sul perché sto utilizzando {'' : []}

+0

Hai provato di inviare solo i dati: intArray? –

+0

Sì, non funziona affatto. WebAPI non sa come gestirlo – LearningJrDev

+0

In WebApi, la differenza tra null e vuoto in una richiesta può essere difficile. Se stai usando quelli per impostare in qualche modo una sorta di "stato" nella tua applicazione, vorrei ripensare a come lo stai facendo. Forse inviando una sorta di flag o qualcosa che inizializzerà correttamente la tua lista sul server. – jensendp

risposta

1
data: {'' : intArray}, 

un nome di chiave in bianco non è consentito in JSON.

Basta inviare la matrice stessa.

data: intArray, 
+0

Questo è richiesto da webAPI quando si invia un tipo di valore – LearningJrDev

+0

In base a [questa domanda e risposta] (http://stackoverflow.com/q/33254385/548304), sono consentite le chiavi vuote. – FriendlyGuy

21

Usa JSON.stringify(intArray) e contentType: 'application/json' opere per me:

$.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. Utilizzare JSON.stringify() per convertire l'oggetto javascript nella stringa JSON.

2. Utilizzare contentType: 'application/json' come è corretto tipo di supporto MIME per JSON. What is the correct JSON content type?

dataType non è necessario

dati: JSON.stringify (intArray), contentType: 'application/json'