asp.net-web-api
API Web ASP.NET MediaTypeFormatter
Ricerca…
MediaTypeFormatter Informazioni di base
MediaTypeFormatter è una classe astratta da cui ereditano le classi JsonMediaTypeFormatter e XmlMediaTypeFormatter . Qui, la classe JsonMediaTypeFormatter gestisce gli oggetti JSON e la classe XmlMediaTypeFormatter gestisce gli oggetti XML.
Restituisce solo JSON indipendentemente dal valore Accept Header:
Per restituire solo oggetti JSON nella risposta della richiesta weather Accept Valore intestazione della richiesta se application/json o application/xml scrivono la seguente riga nel metodo Register della classe WebApiConfig .
config.Formatters.Remove(config.Formatters.XmlFormatter);
Qui, config è un oggetto della classe HttpConfiguration . Questa riga di codice rimuove completamente XmlFormatter che forza l'API Web ASP.NET a restituire sempre JSON indipendentemente dal valore di intestazione Accept nella richiesta del client. Utilizzare questa tecnica quando si desidera che il servizio supporti solo JSON e non XML.
Restituisce solo XML indipendentemente dal valore Accept Header:
Per restituire solo oggetti XML nella risposta della richiesta meteo Accetta il valore Intestazione della richiesta se application/json o application/xml scrivono la seguente riga nel metodo Register della classe WebApiConfig .
config.Formatters.Remove(config.Formatters.JsonFormatter);
Qui, config è un oggetto della classe HttpConfiguration come descritto sopra. Questa riga di codice rimuove completamente JsonFormatter che forza l'API Web ASP.NET a restituire sempre XML indipendentemente dal valore di intestazione Accept nella richiesta del client. Utilizzare questa tecnica quando si desidera che il proprio servizio supporti solo XML e non JSON.
Restituisci JSON anziché XML:
- Quando viene emessa una richiesta dal browser, il servizio API Web deve restituire JSON anziché XML.
- Quando una richiesta viene emessa da uno strumento come il violinista, il valore di intestazione Accept deve essere rispettato. Ciò significa che se l'intestazione Accept è impostata su application / xml il servizio deve restituire XML e se è impostato su application / json il servizio dovrebbe restituire JSON.
Metodo 1:
Includere la seguente riga nel metodo Register della classe WebApiConfig .
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
In questo modo l'API Web ASP.NET viene utilizzata per utilizzare JsonFormatter quando viene richiesta la richiesta di text/html che è l'impostazione predefinita per la maggior parte dei browser. Il problema con questo approccio è che l'intestazione Content-Type della risposta è impostata su text/html che è fuorviante.
Metodo 2:
Usa i formattatori personalizzati. Creare una classe derivata dalla classe JsonMediaTypeFormatter e implementare il metodo SetDefaultContentHeaders .
Ecco l'esempio della classe di formattazione JSON personalizzata che restituisce il formato JSON in risposta.
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");
}
}
E questo è l'esempio del formattatore del tipo di supporto personalizzato che restituisce il formato CSV in risposta.
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);
}
}
}
Successivamente, implementando la classe di formattazione personalizzata, registrarlo nel metodo Register della classe WebApiConfig .
config.Formatters.Add(new CustomJsonFormatter());
Ora, secondo il tuo formattatore, riceverai risposta e Content-Type dal server.