La négociation de contenu est le processus de sélection de la meilleure représentation pour un contenu donné Réponse lorsque plusieurs représentations sont disponibles. signifie, cela dépend de La valeur d'en-tête de la requête est acceptée et le serveur envoie la réponse. primaire Le mécanisme de négociation de contenu en HTTP réside dans ces en-têtes de requête -
Accept - quels types de médias peuvent être acceptés par la réponse, tels que "application/json", "application/xml" ou des types de médias personnalisés tels que "application/ vnd.example" +xml"
Accept-Charset - Quels jeux de caractères sont acceptables, tels que UTF-8 ou ISO 8859-1
Accept-Encoding - Quels encodages de contenu sont acceptables, tels que gzip.
Accept-Language - Préférez les langages d'encodage naturels comme "en-us".
Le serveur peut également examiner d'autres parties de la requête HTTP. Par exemple, si La requête contient l'en-tête X-Requested-With, indiquant une requête AJAX, et le serveur S'il n'y a pas d'en-tête Accept, il peut s'agir par défaut de JSON.
Dans la négociation de contenu, le pipeline commence à partir de Objet HttpConfiguration. Il obtient également la liste des formateurs multimédias de Collection HttpConfiguration.Formatters.
Ensuite, le pipeline appelle IContentNégociation.Négocier, en transmettant -
La méthode Négocier renvoie deux informations -
Si le formateur n'est pas trouvé, la méthode Négocier renvoie null et le client reçoit Erreur HTTP 406 (inacceptable).
Considérons le StudentController suivant.
using DemoWebApplication.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class StudentController : ApiController{ List<Student> students = new List<Student>{ new Student{ Id = 1, Name = "Mark" }, new Student{ Id = 2, Name = "John" } }; } }
L'un des critères d'un service RESTful est que le client doit pouvoir Décidez quel format de réponse ils souhaitent : XML, JSON, etc. Envoyé au serveur contenant l’en-tête Accept. À l'aide de l'en-tête Accept, le client peut Précisez le format de la réponse. Par exemple
Accept: application/xml returns XML Accept: application/json returns JSON
Le résultat ci-dessous montre que lorsque nous transmettons l'en-tête Accept au format XML, la réponse est XML Applications/XML.
Le résultat ci-dessous montre que lorsque nous transmettons l'en-tête Accept en tant que JSON, la réponse est JSON application/JSON.
Veuillez noter quand la réponse est envoyée au client dans le format demandé L'en-tête Content-Type de la réponse est défini sur la valeur appropriée. Par exemple, si Le client demande application/xml et le serveur envoie les données au format XML. Définissez également Content-Type=application/xml.
On peut également préciser le chiffre du mérite. Dans l'exemple ci-dessous, XML a une qualité supérieure Le facteur est plus important que json, le serveur utilise donc un formateur XML et formate les données en XML. application/xml;q=0.8,application/json;q=0.5
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!