asp.net-web-api
ASP.NET Web API MediaTypeFormatter
Sök…
Grundläggande information för MediaTypeFormatter
MediaTypeFormatter är en abstrakt klass från vilken JsonMediaTypeFormatter och XmlMediaTypeFormatter klasser ärver från. Här JsonMediaTypeFormatter klassen JSON-objekt och XmlMediaTypeFormatter klassen hanterar XML-objekt.
Returnera endast JSON oavsett värde för Accept Header:
För att bara returnera JSON-objekt i svaret på begäran vädret Acceptera Header-värdet på begäran om application/json eller application/xml skriver följande rad i Register i klassen WebApiConfig .
config.Formatters.Remove(config.Formatters.XmlFormatter);
Här är config ett objekt i klassen HttpConfiguration . Den här XmlFormatter tar bort XmlFormatter helt och XmlFormatter vilket tvingar ASP.NET Web API att alltid returnera JSON oavsett Acceptera rubrikvärdet i klientbegäran. Använd den här tekniken när du vill att din tjänst endast ska stödja JSON och inte XML.
Returnera bara XML oavsett värdet för Accept Header:
För att returnera endast XML-objekt i svaret på begäran vädret Acceptera Header-värdet på begäran om application/json eller application/xml skriver följande rad i Register i klassen WebApiConfig .
config.Formatters.Remove(config.Formatters.JsonFormatter);
Här är config ett objekt i klassen HttpConfiguration som beskrivs ovan. Den här JsonFormatter tar bort JsonFormatter vilket tvingar ASP.NET Web API att alltid returnera XML oavsett Acceptera rubrikvärdet i klientbegäran. Använd den här tekniken när du vill att din tjänst endast ska stödja XML och inte JSON.
Returnera JSON istället för XML:
- När en begäran utfärdas från webbläsaren bör webb-API-tjänsten returnera JSON istället för XML.
- När en begäran utfärdas från ett verktyg som fiol bör Acceptera rubrikvärdet respekteras. Detta innebär att om Accept-huvudet är inställt på applikation / xml ska tjänsten returnera XML och om den är inställd på applikation / json bör tjänsten returnera JSON.
Metod 1:
Inkludera följande rad i Register för klassen WebApiConfig .
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
Detta instruerar ASP.NET Web API att använda JsonFormatter när begäran görs för text/html vilket är standard för de flesta webbläsare. Problemet med detta tillvägagångssätt är att Content-Type rubrik för svaret är inställd på text/html vilket är vilseledande.
Metod 2:
Använd anpassade formater. Gör en klass som härrör från klassen JsonMediaTypeFormatter och implementera metoden SetDefaultContentHeaders .
Här är exemplet på anpassad JSON-formatorklass som returnerar JSON-format som svar.
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");
}
}
Och detta är exemplet på formatering av anpassad media som returnerar CSV-format som svar.
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);
}
}
}
Efter att ha implementerat den anpassade formaterarklassen registrerar du den i Register för WebApiConfig klassen.
config.Formatters.Add(new CustomJsonFormatter());
Enligt din formaterare får du svar och Content-Type från servern.