Heim >Backend-Entwicklung >C++ >Wie kann ich die Set-Only-Response.Body-Eigenschaft in ASP.NET Core lesen?

Wie kann ich die Set-Only-Response.Body-Eigenschaft in ASP.NET Core lesen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-08 16:34:41310Durchsuche

How Can I Read the Set-Only Response.Body Property in ASP.NET Core?

Zugriff auf den Response.Body in ASP.NET Core: Ein praktischer Leitfaden

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.

Bestehender (weniger als idealer) Ansatz

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.

Verbesserte Lösung: Benutzerdefinierte Middleware

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.

Middleware-Implementierungsdetails

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.

Zusammenfassung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn