12
votes

Schéma de données d'itinéraire ASP .NET Web API API

Actuellement, nous utilisons un itinéraire comme celui-ci: xxx

plutôt que d'utiliser dynamique , 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: xxx

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?

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

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'.

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.


2 commentaires

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/...


3 Réponses :


5
votes

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; }
}


0 commentaires

6
votes

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> }
    ]
}


0 commentaires

0
votes

É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
    // ...
}


1 commentaires

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.