Actuellement, nous utilisons un itinéraire comme celui-ci: plutôt que d'utiliser est la bonne approche de cette situation? Ou existe-t-il une autre meilleure pratique standard pour recevoir des données JSON via ASP .NET WebAPI? P> Plus précisément, cette approche ne fonctionne pas actuellement. Bien que ma petite classe de schéma étend junject, je reçois une erreur de p> Le dictionnaire de paramètres contient une entrée non valide pour le paramètre 'UploadedData' pour la méthode 'System.threading.Tâseaux.Tasks.task`1 [System.Object] Télécharger (UploadReQuest)' dans 'EditPDFServer.Controls.pdffilecontroller'. Le dictionnaire contient une valeur de type 'newtonsoft.json.linq.jobject', mais le paramètre nécessite une valeur de type 'EditPDFServer.Controls.pdffilecontroller + UpploadReQuest'. P>
BlockQuote> Donc, tout d'abord, cela ressemble-t-il à une approche appropriée? Deuxièmement, y a-t-il mieux? Troisièmement, pourquoi cette approche ne fonctionne-t-elle pas? Merci d'avance. P> p> dynamique code>, j'aimerais avoir une compréhension schématique des données à venir . Donc, je pourrais utiliser une configuration comme celle-ci, avec une classe qui définit le schéma: p>
3 Réponses :
Je suggérerais d'utiliser l'attribut JSONProperty pour votre propriété PDFS:
public class UploadRequest : JObject { [JSONProperty("<name of the property in the JSON object>")] public JArray pdfs { get; set; } }
Vous êtes sur la bonne voie.
Vous n'avez pas besoin d'être trop préoccupé par la mise en œuvre interne de Newtonsoft.json. En particulier, vous devriez essayer d'éviter d'utiliser Jobject / jtoken / d'autres types J, et vous n'avez certainement pas besoin de la sous-classe Jobject. P>
Votre classe d'objet de demande peut simplement être: p>
{ "pdfs": [ { <some PDF object here> }, { <some PDF object here> }, { <some PDF object here> } ] }
Étant donné que votre méthode utilise le message Post Verbe, vous devez ajouter l'attribut [debonne] code> sur votre paramètre de méthode:
[HttpPost]
public async Task<dynamic> Upload([FromBody] UploadRequest UploadedData)
{
// Now can access the JArray via uploadedData.pdfs directly
// ...
}
Il vaut la peine de mentionner que vous ne pouvez avoir que 1 paramètre marqué de cette façon. Si vous avez besoin de plusieurs paramètres, envisagez de créer un objet wrapper les contenant tous.
Avez-vous essayé de changer le nom de UploadedData en PDFS
Peut-être que ce lien vous aidera weblog.west-wind.com/posts/2012/aug/30/...