Maison  >  Article  >  développement back-end  >  Qu’est-ce que la négociation de contenu dans Asp.Net webAPI C# ?

Qu’est-ce que la négociation de contenu dans Asp.Net webAPI C# ?

王林
王林avant
2023-09-11 17:13:01579parcourir

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 -

  • Le type d'objet à sérialiser
  • Une collection de formateurs multimédias
  • Requête HTTP

La méthode Négocier renvoie deux informations -

    Lesquels celui à utiliser Le type de média de la réponse du formateur

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.

什么是 Asp.Net webAPI C# 中的内容协商?

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.

什么是 Asp.Net webAPI C# 中的内容协商?

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.

什么是 Asp.Net webAPI C# 中的内容协商?

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

什么是 Asp.Net webAPI C# 中的内容协商?

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer