J'aime L'approche de Felipe Leusin Le mieux : s'assurer que les navigateurs obtiennent JSON sans compromettre la négociation du contenu avec les clients qui veulent réellement du XML. La seule pièce manquante pour moi était que les en-têtes de réponse contenaient toujours content-type : text/html. Pourquoi était-ce un problème ? Parce que j'utilise l'option Extension Chrome JSON Formatter qui inspecte le type de contenu, et je n'obtiens pas le joli formatage auquel je suis habitué. J'ai corrigé cela avec un simple formateur personnalisé qui accepte les requêtes text/html et renvoie des réponses application/json :
public class BrowserJsonFormatter : JsonMediaTypeFormatter
{
public BrowserJsonFormatter() {
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
this.SerializerSettings.Formatting = Formatting.Indented;
}
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) {
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
Inscrivez-vous comme suit :
config.Formatters.Add(new BrowserJsonFormatter());
8 votes
Il y a une discussion ici pour que le retour de JSON seulement soit le comportement par défaut : github.com/aspnet/Mvc/issues/1765