2013-01-31 13 views
27

So che ci sono un sacco di risposte per questo argomento, ma non sono riuscito a trovare la soluzione al mio problema. Ho un API Web ASP.NET MVC che assomiglia a questo:Passaggio di un array JSON a MVC Web API tramite GET

E ho provato a chiamare in questo modo:

$.ajax({ 
     dataType: "json", 
     data: JSON.stringify({idList: listOfIds}),    
     type: "GET", 
     url: "api/v1/util/CountryList", 
     success: function (result) { 
      alert(result); 
     } 
    }); 

L'URL appare allora come questo:

https://localhost/supertext/api/v1/util/CountryList?{%22idList%22:[46,14,62,83,120]} 

alternativa:

$.ajax({ 
     dataType: "json", 
     data: { 
      idList: JSON.stringify(listOfIds), 
     }   
     type: "GET", 
     url: "api/v1/util/CountryList", 
     success: function (result) { 
      alert(result); 
     } 
    }); 

URL:

https://localhost/supertext/api/v1/util/CountryList?idList=%5B46%2C14%2C62%2C83%2C120%5D 

Entrambi i metodi non funzionano.

Devo davvero inviarlo e riceverlo come stringa o usare POST?

risposta

54

No, non provare a inviare JSON in una richiesta GET. Usa JSON con altri verbi che hanno il corpo, come POST e PUT.

farlo nel modo standard, per decorare il vostro parametro di azione con l'attributo [FromUri]:

public IList<Country> GetCountryList([FromUri] List<long> idList) 
{ 
    ... 
} 

e poi basta attivare la richiesta AJAX:

$.ajax({ 
    url: 'api/v1/util/CountryList', 
    type: 'GET', 
    data: { idList: [1, 2, 3] }, 
    traditional: true, 
    success: function (result) { 
     console.log(JSON.stringify(result)); 
    } 
}); 

raccomanda inoltre a leggere per voi su come il il binding del modello nell'API Web funziona:

http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1

+0

Grazie! Funziona se ho dati hardcode: {idList: [1, 2, 3]}, ma non se uso i dati: JSON.stringify ({idList: listOfIds}), – Remy

+7

Ma perché stai stringendo ???? Non 'JSON.stringify' qualcosa! Ti ho già detto di non usare JSON con una richiesta GET nella mia risposta. La tua richiesta dovrebbe apparire così: 'data: {idList: listOfIds}'. Ovviamente presumo che 'listOfIds' sia una matrice javascript di numeri. –

+1

Scusa, ci è voluto un po 'di più per capirlo. Funzionando ora! Molte grazie. – Remy

Problemi correlati