Heim >Backend-Entwicklung >C++ >Wie kann ich die Set-Only-Response.Body-Eigenschaft in ASP.NET Core lesen?
Das direkte Lesen der Eigenschaft Response.Body
in ASP.NET Core ist problematisch, da sie als schreibgeschützt gekennzeichnet ist. Dies stellt eine Herausforderung dar, wenn auf den Antwortinhalt zugegriffen werden muss, nachdem er geschrieben wurde.
Aktuelle Problemumgehungen umfassen häufig das Ersetzen von Response.Body
durch ein MemoryStream
, das Einlesen des Inhalts in eine Zeichenfolge und das anschließende Wiederherstellen des ursprünglichen Streams. Diese Methode ist zwar funktionsfähig, aber aufgrund ihrer Komplexität und des potenziellen Leistungsaufwands nicht optimal.
Eine effizientere Lösung nutzt benutzerdefinierte Middleware, um einen gepufferten Stream zu erstellen, der die Suche unterstützt. Dadurch wird das unnötige Stream-Swapping früherer Ansätze vermieden. Während ASP.NET Core das Lesen des Antwortstroms nach dem Schreiben nicht grundsätzlich unterstützt, bietet benutzerdefinierte Middleware eine saubere Lösung.
Die folgende Middleware vereinfacht den Prozess:
<code class="language-csharp">public class ResponseCaptureMiddleware { private readonly RequestDelegate _next; public ResponseCaptureMiddleware(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); string responseBody = new StreamReader(memoryStream).ReadToEnd(); //Process responseBody here... memoryStream.Seek(0, SeekOrigin.Begin); await memoryStream.CopyToAsync(originalBody); } } }</code>
Diese Middleware ersetzt vorübergehend Response.Body
durch ein MemoryStream
, erfasst den Antwortinhalt und leitet den Inhalt dann an den ursprünglichen Stream weiter. Entscheidend ist, dass der Antwortinhalt (responseBody
) für die Verarbeitung innerhalb der Middleware verfügbar ist.
Obwohl Response.Body
nur festgelegt ist, ist der Zugriff auf seine Inhalte mithilfe eines benutzerdefinierten Middleware-Ansatzes möglich. Diese Methode bietet eine optimierte und effizientere Möglichkeit, die Antwortstream-Manipulation in ASP.NET Core-Anwendungen zu handhaben.
Das obige ist der detaillierte Inhalt vonWie kann ich die Set-Only-Response.Body-Eigenschaft in ASP.NET Core lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!