Zugriff auf Response.Body in ASP.NET Core: Ein verfeinerter Ansatz
Direktes Lesen Response.Body
in ASP.NET Core stellt aufgrund seiner reinen Schreibfunktion eine Herausforderung dar. Es gibt jedoch effiziente Methoden, um den Inhalt abzurufen.
Bekämpfung ineffizienter Methoden
Frühere Lösungen mit MemoryStream
Ersetzungen sind zwar funktionsfähig, führen jedoch zu Leistungseinbußen. Die EnableRewind
-Methode, die auf Request.Body
anwendbar ist, ist für Response.Body
unwirksam.
Einführung einer optimierten Middleware-Lösung
Die optimale Lösung nutzt benutzerdefinierte Middleware ResponseRewindMiddleware
, um Response.Body
das Lesen elegant zu handhaben. Diese Middleware fängt den Antwortstrom ab, leitet ihn vorübergehend an einen MemoryStream
um, verarbeitet die Anfrage, liest den MemoryStream
-Inhalt und stellt dann nahtlos den ursprünglichen Strom wieder her.
Erweiterte Middleware-Implementierung
Hier ist eine verbesserte Implementierung von ResponseRewindMiddleware
:
<code class="language-csharp">public class ResponseRewindMiddleware { private readonly RequestDelegate _next; public ResponseRewindMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { var originalBody = context.Response.Body; using (var memoryStream = new MemoryStream()) { context.Response.Body = memoryStream; await _next(context); memoryStream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(memoryStream)) { var responseBody = await reader.ReadToEndAsync(); // Process responseBody here... } memoryStream.Seek(0, SeekOrigin.Begin); await memoryStream.CopyToAsync(originalBody); } } }</code>
Diese Middleware erfasst den Antwortinhalt effizient, ohne die Leistung oder Datenintegrität zu beeinträchtigen. Der erfasste responseBody
-String steht für die weitere Verarbeitung innerhalb der Middleware bereit. Dieser Ansatz gewährleistet einen sauberen und effizienten Zugriff auf den Inhalt des Antworttexts.
Das obige ist der detaillierte Inhalt vonWie kann ich die Response.Body-Eigenschaft in ASP.NET Core effizient lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!