Le type de média, également appelé type MIME, identifie le format d'une donnée. En HTTP, les types de médias décrivent le format du corps du message. Un type de média se compose de deux chaînes : type et sous-type. Par exemple -
Lorsque le client envoie un message de demande, il peut inclure l'en-tête Accepter. L'en-tête Accept indique au serveur le type de média que le client attend du serveur.
Accepte : text/html, application/xhtml+xml, application/xml p>
Le type de média détermine la manière dont l'API Web sérialise et désérialise le corps du message HTTP. L'API Web prend en charge les données XML, JSON, BSON et codées par formulaire, et vous pouvez prendre en charge d'autres types de médias en écrivant des formateurs de médias.
MediaTypeFormatter est une classe abstraite dont héritent les classes JsonMediaTypeFormatter et XmlMediaTypeFormatter. JsonMediaTypeFormatter gère JSON et XmlMediaTypeFormatter gère XML. Le type de média est spécifié dans la méthode Register de la classe WebApiConfig. Examinons quelques exemples où les types de médias peuvent être utilisés.
using DemoWebApplication.Models; using DemoWebApplication.Models; 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" } }; public IEnumerable <Student> Get(){ return students; } } }
Exemple de renvoi JSON uniquement à partir du service API Web ASP.NET, indépendamment Accepter la valeur de l'en-tête -
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.Remove(config.Formatters.XmlFormatter); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
Avec le code ci-dessus, nous avons supprimé XmlFormatter, ce qui oblige l'API Web ASP.NET à toujours renvoyer JSON quelle que soit la valeur de l'en-tête Accept dans la demande du client. Utilisez cette technique lorsque vous souhaitez que votre service prenne en charge uniquement JSON au lieu de XML.
À partir du résultat ci-dessus, nous pouvons voir que le service API Web renvoie toujours JSON quelle que soit la valeur d'en-tête Accept application/xml.
Exemple de renvoi uniquement du XML à partir du service API Web ASP.NET, quel que soit le Accepter la valeur d'en-tête -
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.Remove(config.Formatters.JsonFormatter); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
À partir du résultat ci-dessus, nous pouvons voir que le service API Web renvoie XML quelle que soit la valeur d'en-tête Accepter application/json.
Exemple de renvoi de JSON au lieu de XML à partir du service API Web ASP.NET dans les situations suivantes Le navigateur fait une demande -
Lorsque le navigateur fait une demande à notre StudentController, la réponse sera au format XML. En effet, les navigateurs envoient par défaut les en-têtes d'acceptation au format texte/html.
Voyons maintenant comment envoyer une réponse JSON au lieu de XML lors d'une requête depuis le navigateur.
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
Le résultat ci-dessous montre que lorsque la requête est déclenchée depuis le navigateur, la réponse est de type JSON quel que soit le texte/html d'en-tête d'acceptation.
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!