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:

  1. När en begäran utfärdas från webbläsaren bör webb-API-tjänsten returnera JSON istället för XML.
  2. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow