MVC puffert bei Verwendung von System.Text.Json keine IAsyncEnumerable-Typen
Model View Controller (MVC) hat in ASP.NET Core 5 die Unterstützung für die Ausgabeformattierung von IAsyncEnumerable<T>-Typen hinzugefügt, indem die Sequenz im Arbeitsspeicher gepuffert und die gepufferte Sammlung formatiert wird. MVC puffert in ASP.NET Core 6 beim Formatieren mithilfe von System.Text.Json keine IAsyncEnumerable<T>-Instanzen mehr. Stattdessen nutzt MVC die Unterstützung, die System.Text.Json für diese Typen hinzugefügt hat.
In den meisten Fällen ist das Fehlen der Pufferung für die Anwendung nicht beobachtbar. Einige Szenarios basierten jedoch möglicherweise versehentlich auf der Puffersemantik für eine richtige Serialisierung. Beispielsweise kann das Zurückgeben einer IAsyncEnumerable<T>-Schnittstelle, die von einer Entity Framework-Abfrage für einen Typ mit verzögert geladenen Eigenschaften unterstützt wird, zu einer gleichzeitigen Abfrageausführung führen, die vom Anbieter möglicherweise nicht unterstützt wird.
Diese Änderung wirkt sich nicht auf die Ausgabeformatierung mit Newtonsoft.Json oder XML-basierten Formatierern aus.
Eingeführt in Version
ASP.NET Core 6.0
Altes Verhalten
IAsyncEnumerable<T>-Instanzen, die von einer MVC-Aktion als Wert zurückgegeben werden, der mithilfe von ObjectResult oder JsonResult formatiert werden soll, werden vor dem Serialisieren als synchrone Sammlung gepuffert.
Neues Verhalten
MVC puffert beim Formatieren mithilfe von System.Text.Json keine IAsyncEnumerable<T>-Instanzen mehr.
Grund für die Änderung
System.Text.Json hat die Unterstützung für das Streamen von IAsyncEnumerable<T>-Typen hinzugefügt. Dies ermöglicht einen geringeren Speicherbedarf bei der Serialisierung.
Empfohlene Maßnahme
Wenn für Ihre Anwendung eine Pufferung erforderlich ist, sollten Sie das IAsyncEnumerable<T>-Objekt manuell puffern:
// Before
public IActionResult Get()
{
return Ok(dbContext.Blogs);
}
// After
public async Task<IActionResult> Get()
{
return Ok(await dbContext.Blogs.ToListAsync());
}