Formatieren von Antwortdaten in Web-APIs in ASP.NET Core
ASP.NET Core MVC unterstützt das Formatieren von Antwortdaten in angegebenen Formaten oder als Reaktion auf die Anforderung eines Clients.
Formatspezifische Aktionsergebnisse
Einige Aktionsergebnistypen sind für ein bestimmtes Format spezifisch, wie z.B. JsonResult und ContentResult. Aktionen können Ergebnisse zurückgeben, die immer ein angegebenes Format verwenden, wobei die Anforderung eines Clients für ein anderes Format ignoriert wird. Bei der Rückgabe JsonResult
werden z. B. ON-formatierte Daten zurückgegeben JS, und die ContentResult
Rückgabe gibt Zeichenfolgendaten im Klartextformat zurück.
Zum Zurückgeben eines bestimmten Typs ist keine Aktion erforderlich. ASP.NET Core unterstützt jeden Objektrückgabewert. Ergebnisse von Aktionen, die Objekte zurückgeben, die keine IActionResult Typen sind, werden mithilfe der entsprechenden IOutputFormatter Implementierung serialisiert. Weitere Informationen finden Sie unter Rückgabetypen der Controlleraktion in ASP.NET Core Web-API.
Standardmäßig gibt die integrierte Hilfsmethode ControllerBase.Ok ON-formatierte Daten zurück JS:
[HttpGet]
public IActionResult Get() =>
Ok(_todoItemStore.GetList());
Der Beispielcode gibt eine Liste von Aufgabenelementen zurück. Wenn Sie die F12-Browserentwicklertools oder Postman mit dem vorherigen Code verwenden, wird Folgendes angezeigt:
- Der Antwortheader, der content-type:
application/json; charset=utf-8
enthält. - Die Anforderungsheader. Beispiel: Der Header
Accept
. DerAccept
-Header wird vom vorangehenden Code ignoriert.
Wenn Sie Daten im Textformat zurückgeben möchten, verwenden Sie ContentResult und das Content-Hilfsprogramm:
[HttpGet("Version")]
public ContentResult GetVersion() =>
Content("v1.0.0");
Im obigen Code wird text/plain
als Content-Type
zurückgegeben.
Bei Aktionen mit mehreren Rückgabetypen wird IActionResult
zurückgegeben. Beispiel: Zurückgeben unterschiedlicher HTTP-Statuscodes basierend auf dem Ergebnis des Vorgangs.
Inhaltsaushandlung
Eine Inhaltsaushandlung tritt auf, wenn der Client einen Accept-Header angibt. Das Standardformat, das von ASP.NET Core verwendet wird, ist JSON. Für die Inhaltsaushandlung gilt:
- Sie wird durch ObjectResult implementiert.
- Sie ist in die Statuscode-spezifischen Aktionsergebnisse integriert, die von den Hilfsmethoden zurückgegeben werden. Die Hilfsmethoden für Aktionsergebnisse basieren auf
ObjectResult
.
Wenn ein Modelltyp zurückgegeben wird, ist ObjectResult
der Rückgabetyp .
Die folgende Aktionsmethode verwendet die Hilfsmethoden Ok
und NotFound
:
[HttpGet("{id:long}")]
public IActionResult GetById(long id)
{
var todo = _todoItemStore.GetById(id);
if (todo is null)
{
return NotFound();
}
return Ok(todo);
}
Standardmäßig unterstützt ASP.NET Core die folgenden Medientypen:
application/json
text/json
text/plain
Tools wie Fiddler oder Postman können den Accept
-Anforderungsheader festlegen, um das Rückgabeformat anzugeben. Wenn der Accept
-Header einen vom Server unterstützten Typ enthält, wird dieser Typ zurückgegeben. Der nächste Abschnitt zeigt, wie zusätzliche Formatierer hinzugefügt werden.
Controlleraktionen können POCOs (Plain Old CLR Objects) zurückgeben. Wenn ein POCO zurückgegeben wird, erstellt die Runtime automatisch ein ObjectResult
, das das Objekt umschließt. Der Client empfängt das formatierte serialisierte Objekt. Wenn das zurückgegebene Objekt null
ist, wird eine 204 No Content
-Antwort zurückgegeben.
Im folgenden Beispiel wird ein Objekttyp zurückgegeben:
[HttpGet("{id:long}")]
public TodoItem? GetById(long id) =>
_todoItemStore.GetById(id);
Im vorherigen Code gibt eine Anforderung für ein gültiges Todo-Element eine 200 OK
Antwort zurück. Eine Anforderung für ein ungültiges Todo-Element gibt eine 204 No Content
Antwort zurück.
Der Accept-Header
Eine Aushandlung des Inhalts findet statt, wenn in der Anforderung ein Accept
-Header angezeigt wird. Wenn eine Anforderung einen Accept-Header enthält, führt ASP.NET Core Folgendes aus:
- Die Medientypen im Accept-Header werden in der bevorzugten Reihenfolge aufgelistet.
- Es wird versucht, einen Formatierer zu finden, der eine Antwort in einem der angegebenen Formate erzeugen kann.
Wenn kein Formatierer gefunden wird, der die Clientanforderung erfüllen kann, führt ASP.NET Core Folgendes aus:
- Gibt zurück
406 Not Acceptable
, wenn MvcOptions.ReturnHttpNotAcceptable auftrue
oder festgelegt ist. - Es wird versucht, den ersten Formatierer zu finden, der eine Antwort erzeugen kann.
Wenn kein Formatierer für das angeforderte Format konfiguriert wurde, wird der erste Formatierer verwendet, der das Objekt formatieren kann. Wenn in der Anforderung kein Accept
-Header vorhanden ist, gilt Folgendes:
- Der erste Formatierer, der das Objekt verarbeiten kann, wird zum Serialisieren der Antwort verwendet.
- Es findet keine Aushandlung statt. Der Server bestimmt, welches Format zurückgegeben werden soll.
Enthält der Accept-Header */*
, wird der Header ignoriert, es sei denn, RespectBrowserAcceptHeader
ist in MvcOptions auf TRUE festgelegt.
Browser und Inhaltsaushandlung
Im Gegensatz zu typischen API-Clients, stellen Webbrowser Accept
-Header bereit. Webbrowser geben viele Formate an, einschließlich Wildcards. Wenn das Framework erkennt, dass eine Anforderung von einem Browser stammt, wird standardmäßig Folgendes ausgeführt:
- Der
Accept
-Header wird ignoriert. - Der Inhalt wird in JSON zurückgegeben, sofern nicht anders konfiguriert.
Dieser Ansatz bietet eine konsistentere Erfahrung in allen Browsern bei der Nutzung von APIs.
Legen Sie die -Eigenschaft auf fest, um eine App so true
zu konfigurieren, dass browser RespectBrowserAcceptHeader accept headers berücksichtigt werden:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(options =>
{
options.RespectBrowserAcceptHeader = true;
});
Konfigurieren von Formatierern
Apps, die zusätzliche Formate unterstützen müssen, können die entsprechenden NuGet-Pakete hinzufügen und die Unterstützung konfigurieren. Es gibt unterschiedliche Formatierungsprogramme für Ein- und für Ausgaben. Eingabeformatierer werden von der Modellbindung verwendet. Ausgabeformatierer werden zum Formatieren von Antworten verwendet. Informationen zum Erstellen eines benutzerdefinierten Formatierers finden Sie unter Benutzerdefinierte Formatierer.
Hinzufügen von Unterstützung für das XML-Format
Rufen AddXmlSerializerFormattersSie zum Konfigurieren von XML-Formatierern auf, die mit XmlSerializerimplementiert wurden:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddXmlSerializerFormatters();
Bei Verwendung dieses Codes geben Controllermethoden das geeignete Format basierend auf dem Accept
-Header der Anforderung zurück.
Konfigurieren von System.Text.Json
-basierten Formatierern
Verwenden Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptionsSie , um Features für die System.Text.Json
-basierten Formatierer zu konfigurieren. Der folgende hervorgehobene Code konfiguriert die PascalCase-Formatierung anstelle der standardmäßigen camelCase-Formatierung:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
Die folgende Aktionsmethode ruft auf ControllerBase.Problem , um eine ProblemDetails Antwort zu erstellen:
[HttpGet("Error")]
public IActionResult GetError() =>
Problem("Something went wrong.");
Eine ProblemDetails
Antwort lautet immer camelCase, auch wenn die App das Format auf PascalCase festlegt. ProblemDetails
folgt RFC 7807, der Kleinbuchstaben angibt.
Verwenden JsonResult
Sie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:
[HttpGet]
public IActionResult Get() =>
new JsonResult(
_todoItemStore.GetList(),
new JsonSerializerOptions
{
PropertyNamingPolicy = null
});
Unterstützung für das on-basierte JSFormat hinzufügen Newtonsoft.Json
Die Standardmäßigen JSON-Formatierer verwenden System.Text.Json
. Um die Newtonsoft.Json
-basierten Formatierer zu verwenden, installieren Sie das Microsoft.AspNetCore.Mvc.NewtonsoftJson
NuGet-Paket, und konfigurieren Sie es in Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddNewtonsoftJson();
Im vorherigen Code konfiguriert der Aufruf von AddNewtonsoftJson
die folgenden Web-API-, MVC- und Razor Pages-Features für die Verwendung Newtonsoft.Json
:
- Eingabe- und Ausgabeformatierer, die ON lesen und schreiben JS
- JsonResult
- JSON Patch
- IJsonHelper
- TempData
Einige Features funktionieren mit System.Text.Json
-basierten Formatierern möglicherweise nicht gut und erfordern einen Verweis auf die Newtonsoft.Json
-basierten Formatierer. Verwenden Sie weiterhin die Newtonsoft.Json
-basierten Formatierer, wenn die App:
- Sie verwendet
Newtonsoft.Json
-Attribute. Zum Beispiel:[JsonProperty]
oder[JsonIgnore]
. - Sie passt die Serialisierungseinstellungen an.
- Sie nutzt Features, die von
Newtonsoft.Json
bereitgestellt werden.
Verwenden SerializerSettingsSie zum Konfigurieren von Features für die Newtonsoft.Json
-basierten Formatierer :
builder.Services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
Verwenden JsonResult
Sie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:
[HttpGet]
public IActionResult GetNewtonsoftJson() =>
new JsonResult(
_todoItemStore.GetList(),
new JsonSerializerSettings
{
ContractResolver = new DefaultContractResolver()
});
Angeben eines Formats
Um Verweisformate einzuschränken, wenden Sie den [Produces]
-Filter an. Wie die meisten Filter[Produces]
kann im Aktions-, Controller- oder globalen Bereich angewendet werden:
[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
public class TodoItemsController : ControllerBase
Mit dem oben stehenden [Produces]
-Filter wird Folgendes ausgeführt:
- Erzwingt, dass alle Aktionen innerhalb des Controllers ON-formatierte Antworten für POCOs (Plain Old CLR Objects) oder ObjectResult und die zugehörigen abgeleiteten Typen zurückgebenJS.
- Gibt JSON-formatierte Antworten zurück, auch wenn andere Formatierer konfiguriert sind und der Client ein anderes Format angibt.
Weitere Informationen finden Sie unter Filter.
Formatierer für besondere Fälle
Einige besondere Fälle werden mithilfe von integrierten Formatierungsprogrammen implementiert. Standardmäßig werden string
-Rückgabetypen als text/plain formatiert (bzw. als text/html, wenn sie über den Accept
-Header angefordert werden). Dieses Verhalten kann durch Entfernen von StringOutputFormatter gelöscht werden. Formatierer werden in Program.cs
entfernt. Aktionen mit einem Modellobjekt-Rückgabetyp geben null
zurück, wenn der Rückgabewert 204 No Content
lautet. Dieses Verhalten kann durch Entfernen von HttpNoContentOutputFormatter gelöscht werden. Der folgende Code entfernt StringOutputFormatter
und HttpNoContentOutputFormatter
.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(options =>
{
// using Microsoft.AspNetCore.Mvc.Formatters;
options.OutputFormatters.RemoveType<StringOutputFormatter>();
options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});
Ohne geben StringOutputFormatter
die integrierten JSON-Formatierungsformate string
Typen zurück. Wenn der integrierte ON-Formatierer JSentfernt wird und ein XML-Formatierer verfügbar ist, gibt der XML-Formatierer string
Typen zurück. Andernfalls geben string
-Rückgabetypen 406 Not Acceptable
zurück.
Ohne HttpNoContentOutputFormatter
werden NULL-Objekte mithilfe des konfigurierten Formatierungsprogramms formatiert. Beispiel:
- Der JSON-Formatierer gibt eine Antwort mit dem Textkörper zurück
null
. - Der XML-Formatierer gibt ein leeres XML-Element mit festgelegtem Attribut
xsi:nil="true"
zurück.
Zuordnung des Antwortformats durch URLs
Clients können in der URL ein bestimmtes Format anfordern, beispielsweise folgendermaßen:
- In der Abfragezeichenfolge oder als Teil des Pfads.
- Durch Verwendung einer formatspezifischen Dateierweiterung wie „.xml“ oder „.json“.
Die Zuordnung des Anforderungspfads sollte in der Route angegeben werden, die die API verwendet. Beispiel:
[ApiController]
[Route("api/[controller]")]
[FormatFilter]
public class TodoItemsController : ControllerBase
{
private readonly TodoItemStore _todoItemStore;
public TodoItemsController(TodoItemStore todoItemStore) =>
_todoItemStore = todoItemStore;
[HttpGet("{id:long}.{format?}")]
public TodoItem? GetById(long id) =>
_todoItemStore.GetById(id);
Die vorangehende Route ermöglicht die Angabe des angeforderten Formats mithilfe einer optionalen Dateierweiterung. Das Attribut [FormatFilter]
überprüft, ob in den RouteData
ein Formatwert vorhanden ist, und ordnet das Antwortformat beim Erstellen der Antwort dem entsprechenden Formatierer zu.
Route | Formatierungsprogramm |
---|---|
/api/todoitems/5 |
Standard-Ausgabeformatierungsprogramm |
/api/todoitems/5.json |
Der JSON-Formatierer (sofern konfiguriert) |
/api/todoitems/5.xml |
XML-Formatierungsprogramm (falls konfiguriert) |
Polymorphe Deserialisierung
Integrierte Funktionen bieten einen begrenzten Funktionsbereich der polymorphen Serialisierung, aber gar keine Unterstützung für Deserialisierung. Die Deserialisierung erfordert einen benutzerdefinierten Konverter. Eine vollständige Stichprobe der polymorphen Deserialisierung finden Sie unter Polymorphe Deserialisierung .
Zusätzliche Ressourcen
ASP.NET Core MVC unterstützt das Formatieren von Antwortdaten. Antwortdaten können mithilfe bestimmter Formate oder durch Übernahme des vom Client angeforderten Formats formatiert werden.
Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)
Formatspezifische Aktionsergebnisse
Einige Aktionsergebnistypen sind für ein bestimmtes Format spezifisch, wie z.B. JsonResult und ContentResult. Aktionen können Ergebnisse zurückgeben, die in einem bestimmten Format formatiert sind, unabhängig von den Clienteinstellungen. Die Rückgabe JsonResult
gibt z. B. ON-formatierte Daten zurück JS. Mit ContentResult
oder einer Zeichenfolge werden Zeichenfolgendaten in Nur-Text-Format zurückgegeben.
Zum Zurückgeben eines bestimmten Typs ist keine Aktion erforderlich. ASP.NET Core unterstützt jeden Objektrückgabewert. Ergebnisse von Aktionen, die Objekte zurückgeben, die keine IActionResult Typen sind, werden mithilfe der entsprechenden IOutputFormatter Implementierung serialisiert. Weitere Informationen finden Sie unter Rückgabetypen der Controlleraktion in ASP.NET Core Web-API.
Die integrierte Hilfsmethode Ok gibt ON-formatierte Daten zurück JS:
// GET: api/authors
[HttpGet]
public ActionResult Get()
{
return Ok(_authors.List());
}
Der Beispieldownload gibt die Liste der Autoren zurück. Bei Verwendung der F12-Entwicklertools im Browser oder von Postman mit dem obigen Code gilt Folgendes:
- Der Antwortheader, der den Inhaltstyp enthält,
application/json; charset=utf-8
wird angezeigt. - Die Anforderungsheader werden angezeigt. Beispiel: Der Header
Accept
. DerAccept
-Header wird vom vorangehenden Code ignoriert.
Wenn Sie Daten im Textformat zurückgeben möchten, verwenden Sie ContentResult und das Content-Hilfsprogramm:
// GET api/authors/about
[HttpGet("About")]
public ContentResult About()
{
return Content("An API listing authors of docs.asp.net.");
}
Im obigen Code wird text/plain
als Content-Type
zurückgegeben. Das Zurückgeben einer Zeichenfolge liefert text/plain
als Content-Type
:
// GET api/authors/version
[HttpGet("version")]
public string Version()
{
return "Version 1.0.0";
}
Bei Aktionen mit mehreren Rückgabetypen wird IActionResult
zurückgegeben. Beispiel: Die Rückgabe von verschiedenen HTTP-Statuscodes basierend auf dem Ergebnis der ausgeführten Vorgänge.
Inhaltsaushandlung
Eine Inhaltsaushandlung tritt auf, wenn der Client einen Accept-Header angibt. Das Standardformat, das von ASP.NET Core verwendet wird, ist JSON. Für die Inhaltsaushandlung gilt:
- Sie wird durch ObjectResult implementiert.
- Sie ist in die Statuscode-spezifischen Aktionsergebnisse integriert, die von den Hilfsmethoden zurückgegeben werden. Die Hilfsmethoden für Aktionsergebnisse basieren auf
ObjectResult
.
Wenn ein Modelltyp zurückgegeben wird, ist ObjectResult
der Rückgabetyp .
Die folgende Aktionsmethode verwendet die Hilfsmethoden Ok
und NotFound
:
// GET: api/authors/search?namelike=th
[HttpGet("Search")]
public IActionResult Search(string namelike)
{
var result = _authors.GetByNameSubstring(namelike);
if (!result.Any())
{
return NotFound(namelike);
}
return Ok(result);
}
Standardmäßig unterstützt ASP.NET Core application/json
-, text/json
- und text/plain
-Medientypen. Tools wie Fiddler oder Postman können den Accept
-Anforderungsheader festlegen, um das Rückgabeformat anzugeben. Wenn der Accept
-Header einen vom Server unterstützten Typ enthält, wird dieser Typ zurückgegeben. Der nächste Abschnitt zeigt, wie zusätzliche Formatierer hinzugefügt werden.
Controlleraktionen können POCOs (Plain Old CLR Objects) zurückgeben. Wenn ein POCO zurückgegeben wird, erstellt die Runtime automatisch ein ObjectResult
, das das Objekt umschließt. Der Client empfängt das formatierte serialisierte Objekt. Wenn das zurückgegebene Objekt null
ist, wird eine 204 No Content
-Antwort zurückgegeben.
Zurückgeben eines Objekttyps:
// GET api/authors/RickAndMSFT
[HttpGet("{alias}")]
public Author Get(string alias)
{
return _authors.GetByAlias(alias);
}
Im oben stehenden Code gibt die Anforderung eines gültigen Autoralias eine 200 OK
-Antwort mit den Daten des Autors zurück. Die Anforderung eines ungültigen Alias gibt eine 204 No Content
-Antwort zurück.
Der Accept-Header
Eine Aushandlung des Inhalts findet statt, wenn in der Anforderung ein Accept
-Header angezeigt wird. Wenn eine Anforderung einen Accept-Header enthält, führt ASP.NET Core Folgendes aus:
- Die Medientypen im Accept-Header werden in der bevorzugten Reihenfolge aufgelistet.
- Es wird versucht, einen Formatierer zu finden, der eine Antwort in einem der angegebenen Formate erzeugen kann.
Wenn kein Formatierer gefunden wird, der die Clientanforderung erfüllen kann, führt ASP.NET Core Folgendes aus:
- Gibt zurück
406 Not Acceptable
, wenn MvcOptions.ReturnHttpNotAcceptable auftrue
oder festgelegt ist. - Es wird versucht, den ersten Formatierer zu finden, der eine Antwort erzeugen kann.
Wenn kein Formatierer für das angeforderte Format konfiguriert wurde, wird der erste Formatierer verwendet, der das Objekt formatieren kann. Wenn in der Anforderung kein Accept
-Header vorhanden ist, gilt Folgendes:
- Der erste Formatierer, der das Objekt verarbeiten kann, wird zum Serialisieren der Antwort verwendet.
- Es findet keine Aushandlung statt. Der Server bestimmt, welches Format zurückgegeben werden soll.
Enthält der Accept-Header */*
, wird der Header ignoriert, es sei denn, RespectBrowserAcceptHeader
ist in MvcOptions auf TRUE festgelegt.
Browser und Inhaltsaushandlung
Im Gegensatz zu typischen API-Clients, stellen Webbrowser Accept
-Header bereit. Webbrowser geben viele Formate an, einschließlich Wildcards. Wenn das Framework erkennt, dass eine Anforderung von einem Browser stammt, wird standardmäßig Folgendes ausgeführt:
- Der
Accept
-Header wird ignoriert. - Der Inhalt wird in JSON zurückgegeben, sofern nicht anders konfiguriert.
Dieser Ansatz bietet eine konsistentere Erfahrung in allen Browsern bei der Nutzung von APIs.
Um eine App so zu konfigurieren, dass Accept-Header in Browsern berücksichtigt werden, legen Sie RespectBrowserAcceptHeader auf true
fest:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.RespectBrowserAcceptHeader = true; // false by default
});
}
Konfigurieren von Formatierern
Apps, die zusätzliche Formate unterstützen müssen, können die geeigneten NuGet-Pakete hinzufügen und die Unterstützung konfigurieren. Es gibt unterschiedliche Formatierungsprogramme für Ein- und für Ausgaben. Eingabeformatierer werden von der Modellbindung verwendet. Ausgabeformatierer werden zum Formatieren von Antworten verwendet. Informationen zum Erstellen eines benutzerdefinierten Formatierers finden Sie unter Benutzerdefinierte Formatierer.
Hinzufügen von Unterstützung für das XML-Format
XML-Formatierer, die mithilfe von XmlSerializer implementiert wurden, werden durch Aufruf von AddXmlSerializerFormatters konfiguriert:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddXmlSerializerFormatters();
}
Der oben stehende Code serialisiert Ergebnisse mithilfe von XmlSerializer
.
Bei Verwendung dieses Codes geben Controllermethoden das geeignete Format basierend auf dem Accept
-Header der Anforderung zurück.
Konfigurieren von System.Text.Json
basierten Formatierern
Features für die System.Text.Json
basierten Formatierer können mit Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptionskonfiguriert werden. Die Standardformatierung ist camelCase. Der folgende hervorgehobene Code legt die PascalCase-Formatierung fest:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddJsonOptions(options =>
options.JsonSerializerOptions.PropertyNamingPolicy = null);
}
Die folgende Aktionsmethode ruft auf ControllerBase.Problem , um eine ProblemDetails Antwort zu erstellen:
[HttpGet("error")]
public IActionResult GetError()
{
return Problem("Something went wrong!");
}
Mit dem obigen Code:
https://localhost:5001/WeatherForecast/temperature
gibt PascalCase zurück.https://localhost:5001/WeatherForecast/error
gibt camelCase zurück. Die Fehlerantwort lautet immer camelCase, auch wenn die App das Format auf PascalCase festlegt.ProblemDetails
folgt RFC 7807, der Kleinbuchstaben angibt
Der folgende Code legt PascalCase fest und fügt einen benutzerdefinierten Konverter hinzu:
services.AddControllers().AddJsonOptions(options =>
{
// Use the default property (Pascal) casing.
options.JsonSerializerOptions.PropertyNamingPolicy = null;
// Configure a custom converter.
options.JsonSerializerOptions.Converters.Add(new MyCustomJsonConverter());
});
Optionen zur Ausgabeserialisierung können aktionsweise mithilfe von JsonResult
konfiguriert werden. Beispiel:
public IActionResult Get()
{
return Json(model, new JsonSerializerOptions
{
WriteIndented = true,
});
}
Unterstützung des Newtonsoft.Json-basierten JSON-Formats hinzugefügt
Die Standardmäßigen JSON-Formatierer basieren auf System.Text.Json
. Unterstützung für Newtonsoft.Json
basierte Formatierer und Features ist verfügbar, indem Das Microsoft.AspNetCore.Mvc.NewtonsoftJson
NuGet-Paket installiert und in Startup.ConfigureServices
konfiguriert wird.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson();
}
Im vorherigen Code konfiguriert der Aufruf von AddNewtonsoftJson
die folgenden Web-API-, MVC- und Razor Pages-Features für die Verwendung Newtonsoft.Json
:
- Eingabe- und Ausgabeformatierer, die ON lesen und schreiben JS
- JsonResult
- JSON Patch
- IJsonHelper
- TempData
Einige Features funktionieren mit System.Text.Json
-basierten Formatierern möglicherweise nicht gut und erfordern einen Verweis auf die Newtonsoft.Json
-basierten Formatierer. Verwenden Sie weiterhin die Newtonsoft.Json
-basierten Formatierer, wenn die App:
- Sie verwendet
Newtonsoft.Json
-Attribute. Zum Beispiel:[JsonProperty]
oder[JsonIgnore]
. - Sie passt die Serialisierungseinstellungen an.
- Sie nutzt Features, die von
Newtonsoft.Json
bereitgestellt werden.
Funktionen für die Newtonsoft.Json
-basierten Formatierer können mithilfe von Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.SerializerSettings
konfiguriert werden:
services.AddControllers().AddNewtonsoftJson(options =>
{
// Use the default property (Pascal) casing
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// Configure a custom converter
options.SerializerSettings.Converters.Add(new MyCustomJsonConverter());
});
Optionen zur Ausgabeserialisierung können aktionsweise mithilfe von JsonResult
konfiguriert werden. Beispiel:
public IActionResult Get()
{
return Json(model, new JsonSerializerSettings
{
Formatting = Formatting.Indented,
});
}
Angeben eines Formats
Um Verweisformate einzuschränken, wenden Sie den [Produces]
-Filter an. Wie die meisten Filter[Produces]
kann im Aktions-, Controller- oder globalen Bereich angewendet werden:
[ApiController]
[Route("[controller]")]
[Produces("application/json")]
public class WeatherForecastController : ControllerBase
{
Mit dem oben stehenden [Produces]
-Filter wird Folgendes ausgeführt:
- Erzwingt, dass alle Aktionen innerhalb des Controllers ON-formatierte Antworten für POCOs (Plain Old CLR Objects) oder ObjectResult und die zugehörigen abgeleiteten Typen zurückgebenJS.
- Wenn andere Formatierer konfiguriert sind und der Client ein anderes Format angibt, JSwird ON zurückgegeben.
Weitere Informationen finden Sie unter Filter.
Formatierer für besondere Fälle
Einige besondere Fälle werden mithilfe von integrierten Formatierungsprogrammen implementiert. Standardmäßig werden string
-Rückgabetypen als text/plain formatiert (bzw. als text/html, wenn sie über den Accept
-Header angefordert werden). Dieses Verhalten kann durch Entfernen von StringOutputFormatter gelöscht werden. Formatierer werden in der ConfigureServices
-Methode entfernt. Aktionen mit einem Modellobjekt-Rückgabetyp geben null
zurück, wenn der Rückgabewert 204 No Content
lautet. Dieses Verhalten kann durch Entfernen von HttpNoContentOutputFormatter gelöscht werden. Der folgende Code entfernt StringOutputFormatter
und HttpNoContentOutputFormatter
.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
// requires using Microsoft.AspNetCore.Mvc.Formatters;
options.OutputFormatters.RemoveType<StringOutputFormatter>();
options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});
}
Ohne geben StringOutputFormatter
die integrierten JSON-Formatierungsformate string
Typen zurück. Wenn der integrierte ON-Formatierer JSentfernt wird und ein XML-Formatierer verfügbar ist, gibt der XML-Formatierer string
Typen zurück. Andernfalls geben string
-Rückgabetypen 406 Not Acceptable
zurück.
Ohne HttpNoContentOutputFormatter
werden NULL-Objekte mithilfe des konfigurierten Formatierungsprogramms formatiert. Beispiel:
- Der JSON-Formatierer gibt eine Antwort mit dem Textkörper zurück
null
. - Der XML-Formatierer gibt ein leeres XML-Element mit festgelegtem Attribut
xsi:nil="true"
zurück.
Zuordnung des Antwortformats durch URLs
Clients können in der URL ein bestimmtes Format anfordern, beispielsweise folgendermaßen:
- In der Abfragezeichenfolge oder als Teil des Pfads.
- Durch Verwendung einer formatspezifischen Dateierweiterung wie „.xml“ oder „.json“.
Die Zuordnung des Anforderungspfads sollte in der Route angegeben werden, die die API verwendet. Beispiel:
[Route("api/[controller]")]
[ApiController]
[FormatFilter]
public class ProductsController : ControllerBase
{
[HttpGet("{id}.{format?}")]
public Product Get(int id)
{
Mit der oben genannten Route kann das angeforderte Format als optionale Dateierweiterung angegeben werden. Das Attribut [FormatFilter]
überprüft, ob in den RouteData
ein Formatwert vorhanden ist, und ordnet das Antwortformat beim Erstellen der Antwort dem entsprechenden Formatierer zu.
Route | Formatierungsprogramm |
---|---|
/api/products/5 |
Standard-Ausgabeformatierungsprogramm |
/api/products/5.json |
Der JSON-Formatierer (sofern konfiguriert) |
/api/products/5.xml |
XML-Formatierungsprogramm (falls konfiguriert) |
ASP.NET Core MVC unterstützt das Formatieren von Antwortdaten in angegebenen Formaten oder als Reaktion auf die Anforderung eines Clients.
Formatspezifische Aktionsergebnisse
Einige Aktionsergebnistypen sind für ein bestimmtes Format spezifisch, wie z.B. JsonResult und ContentResult. Aktionen können Ergebnisse zurückgeben, die immer ein angegebenes Format verwenden, wobei die Anforderung eines Clients für ein anderes Format ignoriert wird. Bei der Rückgabe JsonResult
werden z. B. ON-formatierte Daten zurückgegeben JS, und die ContentResult
Rückgabe gibt Zeichenfolgendaten im Klartextformat zurück.
Zum Zurückgeben eines bestimmten Typs ist keine Aktion erforderlich. ASP.NET Core unterstützt jeden Objektrückgabewert. Ergebnisse von Aktionen, die Objekte zurückgeben, die keine IActionResult Typen sind, werden mithilfe der entsprechenden IOutputFormatter Implementierung serialisiert. Weitere Informationen finden Sie unter Rückgabetypen der Controlleraktion in ASP.NET Core Web-API.
Standardmäßig gibt die integrierte Hilfsmethode ControllerBase.Ok ON-formatierte Daten zurück JS:
[HttpGet]
public IActionResult Get()
=> Ok(_todoItemStore.GetList());
Der Beispielcode gibt eine Liste von Aufgabenelementen zurück. Wenn Sie die F12-Browserentwicklertools oder Postman mit dem vorherigen Code verwenden, wird Folgendes angezeigt:
- Der Antwortheader, der content-type:
application/json; charset=utf-8
enthält. - Die Anforderungsheader. Beispiel: Der Header
Accept
. DerAccept
-Header wird vom vorangehenden Code ignoriert.
Wenn Sie Daten im Textformat zurückgeben möchten, verwenden Sie ContentResult und das Content-Hilfsprogramm:
[HttpGet("Version")]
public ContentResult GetVersion()
=> Content("v1.0.0");
Im obigen Code wird text/plain
als Content-Type
zurückgegeben.
Bei Aktionen mit mehreren Rückgabetypen wird IActionResult
zurückgegeben. Beispiel: Zurückgeben unterschiedlicher HTTP-Statuscodes basierend auf dem Ergebnis des Vorgangs.
Inhaltsaushandlung
Eine Inhaltsaushandlung tritt auf, wenn der Client einen Accept-Header angibt. Das Standardformat, das von ASP.NET Core verwendet wird, ist JSON. Für die Inhaltsaushandlung gilt:
- Sie wird durch ObjectResult implementiert.
- Sie ist in die Statuscode-spezifischen Aktionsergebnisse integriert, die von den Hilfsmethoden zurückgegeben werden. Die Hilfsmethoden für Aktionsergebnisse basieren auf
ObjectResult
.
Wenn ein Modelltyp zurückgegeben wird, ist ObjectResult
der Rückgabetyp .
Die folgende Aktionsmethode verwendet die Hilfsmethoden Ok
und NotFound
:
[HttpGet("{id:long}")]
public IActionResult GetById(long id)
{
var todo = _todoItemStore.GetById(id);
if (todo is null)
{
return NotFound();
}
return Ok(todo);
}
Standardmäßig unterstützt ASP.NET Core die folgenden Medientypen:
application/json
text/json
text/plain
Tools wie Fiddler oder Postman können den Accept
-Anforderungsheader festlegen, um das Rückgabeformat anzugeben. Wenn der Accept
-Header einen vom Server unterstützten Typ enthält, wird dieser Typ zurückgegeben. Der nächste Abschnitt zeigt, wie zusätzliche Formatierer hinzugefügt werden.
Controlleraktionen können POCOs (Plain Old CLR Objects) zurückgeben. Wenn ein POCO zurückgegeben wird, erstellt die Runtime automatisch ein ObjectResult
, das das Objekt umschließt. Der Client empfängt das formatierte serialisierte Objekt. Wenn das zurückgegebene Objekt null
ist, wird eine 204 No Content
-Antwort zurückgegeben.
Im folgenden Beispiel wird ein Objekttyp zurückgegeben:
[HttpGet("{id:long}")]
public TodoItem? GetById(long id)
=> _todoItemStore.GetById(id);
Im vorherigen Code gibt eine Anforderung für ein gültiges Todo-Element eine 200 OK
Antwort zurück. Eine Anforderung für ein ungültiges Todo-Element gibt eine 204 No Content
Antwort zurück.
Der Accept-Header
Eine Aushandlung des Inhalts findet statt, wenn in der Anforderung ein Accept
-Header angezeigt wird. Wenn eine Anforderung einen Accept-Header enthält, führt ASP.NET Core Folgendes aus:
- Die Medientypen im Accept-Header werden in der bevorzugten Reihenfolge aufgelistet.
- Es wird versucht, einen Formatierer zu finden, der eine Antwort in einem der angegebenen Formate erzeugen kann.
Wenn kein Formatierer gefunden wird, der die Clientanforderung erfüllen kann, führt ASP.NET Core Folgendes aus:
- Gibt zurück
406 Not Acceptable
, wenn MvcOptions.ReturnHttpNotAcceptable auftrue
oder festgelegt ist. - Es wird versucht, den ersten Formatierer zu finden, der eine Antwort erzeugen kann.
Wenn kein Formatierer für das angeforderte Format konfiguriert wurde, wird der erste Formatierer verwendet, der das Objekt formatieren kann. Wenn in der Anforderung kein Accept
-Header vorhanden ist, gilt Folgendes:
- Der erste Formatierer, der das Objekt verarbeiten kann, wird zum Serialisieren der Antwort verwendet.
- Es findet keine Aushandlung statt. Der Server bestimmt, welches Format zurückgegeben werden soll.
Enthält der Accept-Header */*
, wird der Header ignoriert, es sei denn, RespectBrowserAcceptHeader
ist in MvcOptions auf TRUE festgelegt.
Browser und Inhaltsaushandlung
Im Gegensatz zu typischen API-Clients, stellen Webbrowser Accept
-Header bereit. Webbrowser geben viele Formate an, einschließlich Wildcards. Wenn das Framework erkennt, dass eine Anforderung von einem Browser stammt, wird standardmäßig Folgendes ausgeführt:
- Der
Accept
-Header wird ignoriert. - Der Inhalt wird in JSON zurückgegeben, sofern nicht anders konfiguriert.
Dieser Ansatz bietet eine konsistentere Erfahrung in allen Browsern bei der Nutzung von APIs.
Legen Sie die -Eigenschaft auf fest, um eine App so true
zu konfigurieren, dass browser RespectBrowserAcceptHeader accept headers berücksichtigt werden:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(options =>
{
options.RespectBrowserAcceptHeader = true;
});
Konfigurieren von Formatierern
Apps, die zusätzliche Formate unterstützen müssen, können die entsprechenden NuGet-Pakete hinzufügen und die Unterstützung konfigurieren. Es gibt unterschiedliche Formatierungsprogramme für Ein- und für Ausgaben. Eingabeformatierer werden von der Modellbindung verwendet. Ausgabeformatierer werden zum Formatieren von Antworten verwendet. Informationen zum Erstellen eines benutzerdefinierten Formatierers finden Sie unter Benutzerdefinierte Formatierer.
Hinzufügen von Unterstützung für das XML-Format
Rufen AddXmlSerializerFormattersSie zum Konfigurieren von XML-Formatierern auf, die mit XmlSerializerimplementiert wurden:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddXmlSerializerFormatters();
Bei Verwendung dieses Codes geben Controllermethoden das geeignete Format basierend auf dem Accept
-Header der Anforderung zurück.
Konfigurieren von System.Text.Json
-basierten Formatierern
Verwenden Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptionsSie , um Features für die System.Text.Json
-basierten Formatierer zu konfigurieren. Der folgende hervorgehobene Code konfiguriert die PascalCase-Formatierung anstelle der standardmäßigen camelCase-Formatierung:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
Verwenden JsonResultSie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:
[HttpGet]
public IActionResult Get()
=> new JsonResult(
_todoItemStore.GetList(),
new JsonSerializerOptions { PropertyNamingPolicy = null });
Unterstützung für das on-basierte JSFormat hinzufügen Newtonsoft.Json
Die Standardmäßigen JSON-Formatierer verwenden System.Text.Json
. Um die Newtonsoft.Json
-basierten Formatierer zu verwenden, installieren Sie das Microsoft.AspNetCore.Mvc.NewtonsoftJson
NuGet-Paket, und konfigurieren Sie es in Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddNewtonsoftJson();
Im vorherigen Code konfiguriert der Aufruf von AddNewtonsoftJson
die folgenden Web-API-, MVC- und Razor Pages-Features für die Verwendung Newtonsoft.Json
:
- Eingabe- und Ausgabeformatierer, die ON lesen und schreiben JS
- JsonResult
- JSON Patch
- IJsonHelper
- TempData
Einige Features funktionieren mit System.Text.Json
-basierten Formatierern möglicherweise nicht gut und erfordern einen Verweis auf die Newtonsoft.Json
-basierten Formatierer. Verwenden Sie weiterhin die Newtonsoft.Json
-basierten Formatierer, wenn die App:
- Sie verwendet
Newtonsoft.Json
-Attribute. Zum Beispiel:[JsonProperty]
oder[JsonIgnore]
. - Sie passt die Serialisierungseinstellungen an.
- Sie nutzt Features, die von
Newtonsoft.Json
bereitgestellt werden.
Verwenden SerializerSettingsSie zum Konfigurieren von Features für die Newtonsoft.Json
-basierten Formatierer :
builder.Services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
Verwenden JsonResult
Sie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:
[HttpGet]
public IActionResult GetNewtonsoftJson()
=> new JsonResult(
_todoItemStore.GetList(),
new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() });
Format ProblemDetails
und ValidationProblemDetails
Antworten
Die folgende Aktionsmethode ruft auf ControllerBase.Problem , um eine ProblemDetails Antwort zu erstellen:
[HttpGet("Error")]
public IActionResult GetError()
=> Problem("Something went wrong.");
Eine ProblemDetails
Antwort lautet immer camelCase, auch wenn die App das Format auf PascalCase festlegt. ProblemDetails
folgt RFC 7807, der Kleinbuchstaben angibt.
Wenn das [ApiController]
Attribut auf eine Controllerklasse angewendet wird, erstellt der Controller eine ValidationProblemDetails Antwort, wenn die Modellvalidierung fehlschlägt. Diese Antwort enthält ein Wörterbuch, das die Eigenschaftennamen des Modells unverändert als Fehlerschlüssel verwendet. Das folgende Modell enthält beispielsweise eine einzelne Eigenschaft, die eine Validierung erfordert:
public class SampleModel
{
[Range(1, 10)]
public int Value { get; set; }
}
Standardmäßig verwendet die ValidationProblemDetails
zurückgegebene Antwort, wenn die Value
Eigenschaft ungültig ist, einen Fehlerschlüssel von Value
, wie im folgenden Beispiel gezeigt:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-00000000000000000000000000000000-000000000000000-00",
"errors": {
"Value": [
"The field Value must be between 1 and 10."
]
}
}
Um die Als Fehlerschlüssel verwendeten Eigenschaftsnamen zu formatieren, fügen Sie der MvcOptions.ModelMetadataDetailsProviders Auflistung eine Implementierung von IMetadataDetailsProvider hinzu. Im folgenden Beispiel wird eine System.Text.Json
-basierte Implementierung hinzugefügt, SystemTextJsonValidationMetadataProvider
die Eigenschaftennamen standardmäßig als camelCase formatiert:
builder.Services.AddControllers();
builder.Services.Configure<MvcOptions>(options =>
{
options.ModelMetadataDetailsProviders.Add(
new SystemTextJsonValidationMetadataProvider());
});
SystemTextJsonValidationMetadataProvider
akzeptiert auch eine Implementierung von in seinem Konstruktor, der eine benutzerdefinierte Benennungsrichtlinie zum Formatieren von JsonNamingPolicy Eigenschaftsnamen angibt.
Um einen benutzerdefinierten Namen für eine Eigenschaft innerhalb eines Modells festzulegen, verwenden Sie das Attribut [JsonPropertyName] für die Eigenschaft:
public class SampleModel
{
[Range(1, 10)]
[JsonPropertyName("sampleValue")]
public int Value { get; set; }
}
Die ValidationProblemDetails
Antwort, die für das vorherige Modell zurückgegeben wird, wenn die Value
Eigenschaft ungültig ist, verwendet einen Fehlerschlüssel von sampleValue
, wie im folgenden Beispiel gezeigt:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-00000000000000000000000000000000-000000000000000-00",
"errors": {
"sampleValue": [
"The field Value must be between 1 and 10."
]
}
}
Um die ValidationProblemDetails
Antwort mit Newtonsoft.Json
zu formatieren, verwenden Sie NewtonsoftJsonValidationMetadataProvider
:
builder.Services.AddControllers()
.AddNewtonsoftJson();
builder.Services.Configure<MvcOptions>(options =>
{
options.ModelMetadataDetailsProviders.Add(
new NewtonsoftJsonValidationMetadataProvider());
});
Standardmäßig NewtonsoftJsonValidationMetadataProvider
werden Eigenschaftennamen als camelCase formatiert. NewtonsoftJsonValidationMetadataProvider
akzeptiert auch eine Implementierung von in seinem Konstruktor, der eine benutzerdefinierte Benennungsrichtlinie zum Formatieren von NamingPolicy
Eigenschaftsnamen angibt. Verwenden Sie das [JsonProperty]
-Attribut, um einen benutzerdefinierten Namen für eine Eigenschaft innerhalb eines Modells festzulegen.
Angeben eines Formats
Um Verweisformate einzuschränken, wenden Sie den [Produces]
-Filter an. Wie die meisten Filter[Produces]
kann im Aktions-, Controller- oder globalen Bereich angewendet werden:
[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
public class TodoItemsController : ControllerBase
Mit dem oben stehenden [Produces]
-Filter wird Folgendes ausgeführt:
- Erzwingt, dass alle Aktionen innerhalb des Controllers ON-formatierte Antworten für POCOs (Plain Old CLR Objects) oder ObjectResult und die zugehörigen abgeleiteten Typen zurückgebenJS.
- Gibt JSON-formatierte Antworten zurück, auch wenn andere Formatierer konfiguriert sind und der Client ein anderes Format angibt.
Weitere Informationen finden Sie unter Filter.
Formatierer für besondere Fälle
Einige besondere Fälle werden mithilfe von integrierten Formatierungsprogrammen implementiert. Standardmäßig werden string
-Rückgabetypen als text/plain formatiert (bzw. als text/html, wenn sie über den Accept
-Header angefordert werden). Dieses Verhalten kann durch Entfernen von StringOutputFormatter gelöscht werden. Formatierer werden in Program.cs
entfernt. Aktionen mit einem Modellobjekt-Rückgabetyp geben null
zurück, wenn der Rückgabewert 204 No Content
lautet. Dieses Verhalten kann durch Entfernen von HttpNoContentOutputFormatter gelöscht werden. Der folgende Code entfernt StringOutputFormatter
und HttpNoContentOutputFormatter
.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(options =>
{
// using Microsoft.AspNetCore.Mvc.Formatters;
options.OutputFormatters.RemoveType<StringOutputFormatter>();
options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});
Ohne geben StringOutputFormatter
die integrierten JSON-Formatierungsformate string
Typen zurück. Wenn der integrierte ON-Formatierer JSentfernt wird und ein XML-Formatierer verfügbar ist, gibt der XML-Formatierer string
Typen zurück. Andernfalls geben string
-Rückgabetypen 406 Not Acceptable
zurück.
Ohne HttpNoContentOutputFormatter
werden NULL-Objekte mithilfe des konfigurierten Formatierungsprogramms formatiert. Beispiel:
- Der JSON-Formatierer gibt eine Antwort mit dem Textkörper zurück
null
. - Der XML-Formatierer gibt ein leeres XML-Element mit festgelegtem Attribut
xsi:nil="true"
zurück.
Zuordnung des Antwortformats durch URLs
Clients können in der URL ein bestimmtes Format anfordern, beispielsweise folgendermaßen:
- In der Abfragezeichenfolge oder als Teil des Pfads.
- Durch Verwendung einer formatspezifischen Dateierweiterung wie „.xml“ oder „.json“.
Die Zuordnung des Anforderungspfads sollte in der Route angegeben werden, die die API verwendet. Beispiel:
[ApiController]
[Route("api/[controller]")]
[FormatFilter]
public class TodoItemsController : ControllerBase
{
private readonly TodoItemStore _todoItemStore;
public TodoItemsController(TodoItemStore todoItemStore)
=> _todoItemStore = todoItemStore;
[HttpGet("{id:long}.{format?}")]
public TodoItem? GetById(long id)
=> _todoItemStore.GetById(id);
Die vorangehende Route ermöglicht die Angabe des angeforderten Formats mithilfe einer optionalen Dateierweiterung. Das Attribut [FormatFilter]
überprüft, ob in den RouteData
ein Formatwert vorhanden ist, und ordnet das Antwortformat beim Erstellen der Antwort dem entsprechenden Formatierer zu.
Route | Formatierungsprogramm |
---|---|
/api/todoitems/5 |
Standard-Ausgabeformatierungsprogramm |
/api/todoitems/5.json |
Der JSON-Formatierer (sofern konfiguriert) |
/api/todoitems/5.xml |
XML-Formatierungsprogramm (falls konfiguriert) |
Polymorphe Deserialisierung
Integrierte Funktionen bieten einen begrenzten Funktionsbereich der polymorphen Serialisierung, aber gar keine Unterstützung für Deserialisierung. Die Deserialisierung erfordert einen benutzerdefinierten Konverter. Eine vollständige Stichprobe der polymorphen Deserialisierung finden Sie unter Polymorphe Deserialisierung .