asp.net-web-api
ASP.NET Web API MediaTypeFormatter
Zoeken…
MediaTypeFormatter Basisinformatie
MediaTypeFormatter is een abstracte klasse waarvan de klassen JsonMediaTypeFormatter en XmlMediaTypeFormatter erven. Hier JsonMediaTypeFormatter klasse JsonMediaTypeFormatter JSON-objecten en XmlMediaTypeFormatter klasse XmlMediaTypeFormatter XML-objecten.
Retourneer alleen JSON ongeacht de waarde van de koptekst accepteren:
Als u alleen JSON-objecten wilt retourneren in reactie op het application/json , accepteer Koptekstwaarde van verzoek als application/json of application/xml de volgende regel in de methode Register van de klasse WebApiConfig .
config.Formatters.Remove(config.Formatters.XmlFormatter);
Hier is config een object van de klasse HttpConfiguration . Deze coderegel verwijdert XmlFormatter volledig, waardoor ASP.NET Web API altijd JSON moet retourneren, ongeacht de waarde van de koptekst Accept in de XmlFormatter . Gebruik deze techniek wanneer u wilt dat uw service alleen JSON ondersteunt en niet XML.
Retourneer alleen XML ongeacht de waarde van de koptekst accepteren:
Als u alleen XML-objecten wilt retourneren als reactie op het application/json , accepteert u de waarde van de koptekst van het verzoek als application/json of application/xml de volgende regel schrijft in de methode Register van de klasse WebApiConfig .
config.Formatters.Remove(config.Formatters.JsonFormatter);
Hier is config een object van de klasse HttpConfiguration zoals hierboven beschreven. Deze coderegel verwijdert JsonFormatter volledig, waardoor ASP.NET Web API altijd XML retourneert, ongeacht de waarde van de koptekst Accept in de JsonFormatter . Gebruik deze techniek wanneer u wilt dat uw service alleen XML ondersteunt en niet JSON.
Retourneer JSON in plaats van XML:
- Wanneer een verzoek van de browser wordt uitgegeven, moet de web-API-service JSON retourneren in plaats van XML.
- Wanneer een verzoek van een tool als fiddler wordt uitgegeven, moet de waarde Kopregel accepteren worden gerespecteerd. Dit betekent dat als de Accept-header is ingesteld op application / xml, de service XML moet retourneren en als deze is ingesteld op application / json, de service JSON moet retourneren.
Methode 1:
Neem de volgende regel op in de methode Register van de klasse WebApiConfig .
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
Deze geeft ASP.NET Web API opdracht JsonFormatter te gebruiken wanneer een aanvraag wordt gedaan voor text/html , de standaardinstelling voor de meeste browsers. Het probleem met deze benadering is dat de Content-Type kop van het antwoord is ingesteld op text/html wat misleidend is.
Methode 2:
Gebruik aangepaste formatters. Maak een klasse die is afgeleid van de klasse JsonMediaTypeFormatter en implementeer de methode SetDefaultContentHeaders .
Hier is het voorbeeld van een aangepaste JSON-indelingsklasse die als antwoord de JSON-indeling retourneert.
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");
}
}
En dit is het voorbeeld van formatter van het Custom Media-type dat als reactie CSV-formaat retourneert.
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);
}
}
}
Nadat u de aangepaste formatter-klasse hebt geïmplementeerd, registreert u deze in de methode Register van de klasse WebApiConfig .
config.Formatters.Add(new CustomJsonFormatter());
Afhankelijk van uw formatter ontvangt u nu antwoord en Content-Type van de server.