asp.net-web-api
ASP.NET Web API MediaTypeFormatter
Szukaj…
MediaTypeFormatter Podstawowe informacje
MediaTypeFormatter to klasa abstrakcyjna, z której dziedziczą klasy JsonMediaTypeFormatter i XmlMediaTypeFormatter . Tutaj klasa JsonMediaTypeFormatter obsługuje obiekty JSON, a klasa XmlMediaTypeFormatter obsługuje obiekty XML.
Zwraca tylko JSON, niezależnie od wartości Accept Header:
Aby powrócić tylko JSON obiekty w odpowiedzi na pogodę żądanie Zebrane wartość nagłówka żądania jeśli application/json lub application/xml napisać następujący wiersz w Register metody WebApiConfig klasie.
config.Formatters.Remove(config.Formatters.XmlFormatter);
Tutaj config jest obiektem klasy HttpConfiguration . Ten wiersz kodu całkowicie usuwa XmlFormatter który zmusza ASP.NET Web API do zawsze zwracania JSON, niezależnie od wartości nagłówka Accept w żądaniu klienta. Użyj tej techniki, jeśli chcesz, aby Twoja usługa obsługiwała tylko JSON, a nie XML.
Zwraca tylko XML niezależnie od wartości Accept Header:
Aby powrócić tylko obiekty XML w odpowiedzi na pogodę żądanie Zebrane wartość nagłówka żądania jeśli application/json lub application/xml napisać następujący wiersz w Register metody WebApiConfig klasie.
config.Formatters.Remove(config.Formatters.JsonFormatter);
Tutaj config jest obiektem klasy HttpConfiguration jak opisano powyżej. Ten wiersz kodu całkowicie usuwa JsonFormatter który zmusza interfejs API sieci Web JsonFormatter ASP.NET do zwracania kodu XML zawsze, niezależnie od wartości nagłówka Accept w żądaniu klienta. Użyj tej techniki, jeśli chcesz, aby Twoja usługa obsługiwała tylko XML, a nie JSON.
Zwraca JSON zamiast XML:
- Po wysłaniu żądania z przeglądarki usługa interfejsu API sieci Web powinna zwrócić JSON zamiast XML.
- Gdy żądanie jest wysyłane z narzędzia takiego jak skrzypek, należy przestrzegać wartości nagłówka Akceptuj. Oznacza to, że jeśli nagłówek Accept jest ustawiony na application / xml, usługa powinna zwrócić XML, a jeśli jest ustawiona na application / json, usługa powinna zwrócić JSON.
Metoda 1:
Zawierać następującą linię w Register metody WebApiConfig klasie.
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
To instruuje ASP.NET Web API, aby korzystał z JsonFormatter gdy JsonFormatter jest żądanie dla text/html który jest domyślny dla większości przeglądarek. Problem z tym podejściem polega na tym, że nagłówek Content-Type odpowiedzi jest ustawiony na text/html co jest mylące.
Metoda 2:
Użyj niestandardowych formatów. Utwórz klasę wywodzącą się z klasy JsonMediaTypeFormatter i zaimplementuj metodę SetDefaultContentHeaders .
Oto przykład niestandardowej klasy formatora JSON, która w odpowiedzi zwraca format JSON.
public class CustomJsonFormatter : JsonMediaTypeFormatter
{
public CustomJsonFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
I to jest przykład formatera typu Custom Media, który w odpowiedzi zwraca format CSV.
public class CSVMediaTypeFormatter : MediaTypeFormatter {
public CSVMediaTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
public CSVMediaTypeFormatter(MediaTypeMapping mediaTypeMapping) : this()
{
MediaTypeMappings.Add(mediaTypeMapping);
}
public CSVMediaTypeFormatter(IEnumerable<MediaTypeMapping> mediaTypeMappings) : this()
{
foreach (var mediaTypeMapping in mediaTypeMappings)
{
MediaTypeMappings.Add(mediaTypeMapping);
}
}
}
Po, wdrażanie zwyczaj klasa formater zarejestrować go w Register metody WebApiConfig klasie.
config.Formatters.Add(new CustomJsonFormatter());
Teraz, zgodnie ze swoim formatyzatorem, otrzymasz odpowiedź i Content-Type z serwera.