Transmission des données JSON POST à la méthode API Web en tant qu'objet
Dans ASP.NET MVC, transmission d'un objet client au format JSON via un La requête POST peut entraîner des valeurs nulles dans le paramètre client de la méthode POST. Ce problème est dû au type de contenu par défaut utilisé par les navigateurs, qui est "application/x-www-form-urlencoded".
Solution
Pour rectifier le problème, l'en-tête Content-Type doit être défini sur "application/json" dans la requête POST. Ceci peut être réalisé en utilisant Content-Type : "application/json" dans l'en-tête de la requête, comme démontré ci-dessous :
$(function () { var customer = {contact_name :"Scott",company_name:"HP"}; $.ajax({ type: "POST", data :JSON.stringify(customer), url: "api/Customer", contentType: "application/json" }); });
En spécifiant le Content-Type comme "application/json", le modèle binder reconnaîtra et liera les données JSON à l'objet de classe correspondant avec précision.
Passing Complex Objets
Si le paramètre de méthode API web est un objet complexe, tel que :
public class CustomerViewModel { public int Id {get; set;} public string Name {get; set;} public List<TagViewModel> Tags {get; set;} }
Pour envoyer cet objet depuis le côté client, le code suivant peut être utilisé :
//Build an object which matches the structure of our view model class var model = { Name: "Shyju", Id: 123, Tags: [{ Id: 12, Code: "C" }, { Id: 33, Code: "Swift" }] }; $.ajax({ type: "POST", data: JSON.stringify(model), url: "../product/save", contentType: "application/json" }).done(function(res) { console.log('res', res); // Do something with the result :) });
Assurer l'attribut [FromBody]
Le paramètre de la méthode de l'API Web doit être décoré avec l'attribut [FromBody] pour activer la liaison de modèle à partir du corps de la requête. Si cet attribut est omis, les propriétés plates seront liées correctement, mais les propriétés complexes resteront vides.
[HttpPost] public CustomerViewModel Save([FromBody] CustomerViewModel m) { return m; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!