Suche…


Grundlegende Informationen zu MediaTypeFormatter

MediaTypeFormatter ist eine abstrakte Klasse, von der die Klassen JsonMediaTypeFormatter und XmlMediaTypeFormatter erben. Hier behandelt die JsonMediaTypeFormatter Klasse JSON-Objekte und die XmlMediaTypeFormatter Klasse XML-Objekte.

Gibt nur JSON zurück, unabhängig vom Accept Header-Wert:

Um nur JSON-Objekte in der Antwort der Anfrage zurückzugeben, akzeptieren Sie den Header Header der Anfrage, wenn application/json oder application/xml die folgende Zeile in die Register Methode der WebApiConfig Klasse WebApiConfig .

config.Formatters.Remove(config.Formatters.XmlFormatter);

config ist hier ein Objekt der HttpConfiguration Klasse. Durch diese Codezeile wird XmlFormatter vollständig entfernt, XmlFormatter die ASP.NET-Web-API XmlFormatter , JSON unabhängig von dem Accept-Header-Wert in der Clientanforderung zurückzugeben. Verwenden Sie diese Technik, wenn Ihr Service nur JSON und nicht XML unterstützen soll.

Gibt nur XML zurück, unabhängig vom Accept Header-Wert:

Um nur XML-Objekte in der Antwort der Anfrage zurückzugeben, akzeptieren Sie den Header Header der Anfrage, wenn application/json oder application/xml die folgende Zeile in die Register Methode der WebApiConfig Klasse WebApiConfig .

config.Formatters.Remove(config.Formatters.JsonFormatter);

config ist hier ein Objekt der HttpConfiguration Klasse, wie oben beschrieben. Durch diese Codezeile wird JsonFormatter vollständig entfernt, JsonFormatter die ASP.NET-Web-API unabhängig von dem Accept-Header-Wert in der Clientanforderung immer XML JsonFormatter . Verwenden Sie diese Technik, wenn Ihr Dienst nur XML und nicht JSON unterstützen soll.

JSON anstelle von XML zurückgeben:

  1. Wenn eine Anforderung vom Browser ausgegeben wird, sollte der Web-API-Dienst JSON anstelle von XML zurückgeben.
  2. Wenn eine Anfrage von einem Tool wie Fiddler ausgegeben wird, sollte der Accept-Header-Wert berücksichtigt werden. Das heißt, wenn der Accept-Header auf application / xml gesetzt ist, sollte der Dienst XML zurückgeben, und wenn er auf application / json gesetzt ist, sollte der Service JSON zurückgeben.

Methode 1:

Fügen Sie die folgende Zeile in die Register Methode der WebApiConfig Klasse ein.

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

Dadurch wird die ASP.NET-Web-API angewiesen, JsonFormatter zu verwenden, wenn text/html JsonFormatter Dies ist die Standardeinstellung für die meisten Browser. Das Problem bei diesem Ansatz ist, dass der Content-Type Header der Antwort auf text/html was irreführend ist.

Methode 2:

Verwenden Sie benutzerdefinierte Formatierer. JsonMediaTypeFormatter Sie eine Klasse, die von der JsonMediaTypeFormatter Klasse abgeleitet ist, und implementieren Sie die SetDefaultContentHeaders Methode.

Hier ist das Beispiel einer benutzerdefinierten JSON-Formatierungsklasse, die als Antwort das JSON-Format zurückgibt.

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");
    }
}

Und dies ist das Beispiel eines Formatierers für benutzerdefinierte Medien, der als Antwort das CSV-Format zurückgibt.

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);
        }
    }
}

Anschließend implementieren Sie die benutzerdefinierte Formatierungsklasse in der Register Methode der WebApiConfig Klasse.

config.Formatters.Add(new CustomJsonFormatter());

Entsprechend Ihrem Formatierungsprogramm erhalten Sie Antwort und Content-Type vom Server.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow