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