asp.net-web-api
ASP.NET-Web-API MediaTypeFormatter
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:
- Wenn eine Anforderung vom Browser ausgegeben wird, sollte der Web-API-Dienst JSON anstelle von XML zurückgeben.
- 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.