Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 27609|Répondre: 3

[WebAPI] WebAPI ne peut pas lier plusieurs paramètres (SB et SB1) au contenu de la requête

[Copié le lien]
Publié sur 16/08/2016 13:52:38 | | | |



Dans WebAPI, le corps de la requête (HttpContent) ne peut être lu qu’une seule fois, pas mis en cache, et ne peut être lu qu’en avant.

Par exemple :

1. Adresse de demande : / ?id=123&nom=bob

    Méthode côté serveur : void Action (int id, nom de la chaîne) // Tous les paramètres sont de types simples, donc ils proviennent tous de l’URL

2. Adresse de demande : / ?id=123&name=bob

    Méthode côté serveur : void Action ([FromUri] int id, [FromUri] nom de la chaîne) // Identique à la ci-dessus

                      void Action ([FromBody] nom de la corde) ; L’attribut [FormBody] affiche que tout le corps est lu comme une chaîne d’arguments

3. Adresse de demande : / ?id=123

    Définition de la classe :

classe publique Customer { // Un type d’objet complexe défini
  chaîne publique Nom { get ; set ; }
  public int Age { get ; set ; }
}

    Méthode côté serveur : void Action(int id, Customer c) // L’id du paramètre est lu à partir de la chaîne de requête, le paramètre c est une classe d’objet client complexe, lue du corps via le formateur

    Méthode côté serveur : annulation d’action (Client c1, Client c2) // Erreur ! Plusieurs paramètres sont de types complexes et tous essaient de lire à partir d’un corps, qui ne peut être lu qu’une seule fois

    Méthode côté serveur : action void ([FromUri] Client c1, Client c2) // Oui ! Contrairement à l’action ci-dessus, le type complexe C1 sera lu à partir de l’URL et C2 à partir du corps

4. Méthode ModelBinder :

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Indique qu’un classeur de modèle spécifique est utilisé pour résoudre le paramètre

[ModelBinder(MyCustomBinder)] classe publique SomeType { } // Appliquez cette règle à tous les paramètres SomeType en déclarant l’attribut [ModelBidner(MyCustomBinder)] à un type spécifique SomeType

void Action (SomeType c) // Puisque le type de c est SomeType, les caractéristiques de SomeType sont appliquées pour déterminer sa liaison de modèle



Résumé:

1. Les paramètres simples par défaut sont passés via des paramètres URL, avec des exceptions :

1.1 Si la route contient le paramètre id, le paramètre id est transmis par la route ;

1.2 Si le paramètre est marqué comme [FromBody], le paramètre peut être un paramètre simple, et le client peut le transmettre via POST : $.ajax(url, '=value'), ou $.ajax({url : url, data : {'' : 'value'}}) ;

2. Les paramètres complexes par défaut (classes d’entité personnalisées) sont transmis via POST, à des exceptions près :

2.1 Si la valeur du paramètre est marquée comme [FromUri], le paramètre peut être un paramètre complexe ;

3. Un paramètre marqué [FromBody] n’est autorisé à apparaître qu’une seule fois, un paramètre marqué [FromUri] peut apparaître plusieurs fois, et si le paramètre marqué [FromUri] est un paramètre simple, le tag peut être supprimé.




Précédent:.NET Oracle méthode de requête multi-table, une méthode stupide.
Prochain:C# utilise la réflexion pour déterminer si une propriété est attribuée
Publié sur 16/08/2016 15:21:29 |
ModelBinder devrait avoir une classe de caractéristiques pour ModelBinderAttribute

Similaire aux filtres
Publié sur 16/08/2016 15:21:44 |
Viens nous rendre visite tous les jours
Publié sur 16/08/2016 15:22:00 |
Donnez-moi un peu de prestige
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com