6

Sto cercando di passare un array di int ma non riesco a ottenere il valore nel metodo WebAPIPassando array di interi a WebAPI Metodo

var postData = { "deletedIds": deletedIds }; 

    $.ajax({ 
     type: "DELETE", 
     traditional: true, 
     dataType: 'json', 
     contentType: 'application/json', 
     cache: false, 
     url: "/api/Management/Models", 
     data: JSON.stringify(postData), 
     success: ModelDeleted, 
     error: ModelNotDeleted 
    }); 

e in apiController:

[HttpDelete] 
     public bool DeleteModel(int[] deletedIds) 
     { 
      return modelsRepository.DeleteModels(deletedIds); 
     } 
+0

Ho provato a rimuovere JSON.stringify ma ancora non funziona –

risposta

8

tuo codice sembra piuttosto Ok per me. Si prega di definire la struttura dell'oggetto "deletedIds". un suggerimento è quello di utilizzare nuovo oggetto Array() per inizializzare la proprietà deletedIds e rimuovere JSON.stringify(). Una domanda simile chiedeva here.

EDIT

Web API supporta l'analisi dei dati contenuti in una varietà di modi, ma non si occupa più postato valori di contenuto. Una soluzione per il tuo problema potrebbe essere quella di creare un ViewModel con una proprietà di tipo int []. codice come qui di seguito,

public class SimpleViewModel 
{ 
    public int[] deletedIds{ get; set; } 
} 

//Controller 
[HttpDelete] 
    public bool DeleteModel(SimpleViewModel deletedIds) 
    { 
     return modelsRepository.DeleteModels(deletedIds.deletedIds); 
    } 

e usarlo come tipo di parametro.

+0

ho provato ad utilizzare new Array ma ancora ottenere nullo sul parametro metodo WebAPI –

+0

Grazie per la tua risposta ma la domanda a cui fai riferimento non è la stessa il mio codice funziona bene quando uso il metodo action nel controller regolare, ma quando url è su webapi non può ottenere i dati –

+0

Usa firebug per testare i dati del post. – Shashank

0

Sospetto che il bit stringify stia rovinando il tuo oggetto - hai provato ad assegnarlo a una variabile per vedere se è la formattazione prevista?

Stai stringifying il tutto in questo momento:

{ "deletedIds": deletedIds }

mentre quello che probabilmente si desidera inviare come corpo post è questo:

{ "deletedIds": JSON.stringify(deletedIds) }

+0

In entrambi i casi, se il metodo del controller si aspetta degli interi, perché li stringa in JS? –

+0

stringify era solo un tentativo Ho creato un metodo di azione di test in un controller regolare e funziona mvc modelbinder funziona ma webapi no !! –

+1

@MuhammadAlaa: pubblica il JSON esatto che stai inviando con la richiesta. Ha colpito il metodo del controller? Stai ricevendo un array vuoto? –

2

Infine, in base su @Shanhank Risposta ha funzionato e il codice modificato come:

var deletedIds = new Array(); 

deletedIds.push(modelId); 

var postData = { "DeletedIds": deletedIds }; 
$.ajax({ 
    type: "Delete", 
    traditional: true, 
    dataType: 'json', 
    cache: false, 
    url: "/api/Management/Models", 
    data: postData, 
    success: ModelDeleted, 
    error: ModelNotDeleted 
}); 

e apiController:

[HttpDelete] 
     public bool DeleteModels(DeleteViewModel dvm) 
     { 
      return modelsRepository.DeleteModels(dvm.DeletedIds); 
     } 

e per la DeleteViewModel:

public class DeleteViewModel 
    { 
     public int[] DeletedIds { get; set; } 
    } 
Problemi correlati