Heim > Backend-Entwicklung > C++ > Wie kann ich den ASP.NET Core Response.Body mehrmals in Middleware lesen?

Wie kann ich den ASP.NET Core Response.Body mehrmals in Middleware lesen?

Mary-Kate Olsen
Freigeben: 2025-01-08 16:22:42
Original
710 Leute haben es durchsucht

How Can I Read the ASP.NET Core Response.Body Multiple Times in Middleware?

ASP.NET Core-Middleware liest Response.Body mehrmals

Übersicht

In ASP.NET Core kann der mehrfache Zugriff auf den Antwortstream eine Herausforderung darstellen. In diesem Artikel werden die Einschränkungen des Standardverhaltens „Response.Body“ untersucht und eine Lösung zum Lesen des Antwortstroms in benutzerdefinierter Middleware bereitgestellt.

Hintergrund

In ASP.NET Core ist Response.Body eine schreibgeschützte Eigenschaft, was bedeutet, dass sie nicht dazu gedacht ist, innerhalb desselben Anforderungszyklus gelesen zu werden. Dies ist Teil der Leistungsoptimierung des Frameworks, kann jedoch zu Schwierigkeiten führen, wenn Sie mehrmals auf den Antwortstream zugreifen müssen.

„Vorübergehende“ Lösung: Ersetzen Sie den Antwortstrom

Die im Artikel erwähnte Lösung scheint nicht optimal zu sein, da sie das Ersetzen des Response.Body-Streams durch einen MemoryStream zum Lesen beinhaltet. Dies ist in der Tat ein effektiver Ansatz, wenn auch etwas indirekt.

Pufferung für Response.Body aktivieren

Ab ASP.NET Core 2.1 gibt es eine bessere Möglichkeit, mehrmals auf den Antwortstream zuzugreifen: Aktivieren Sie die Pufferung. Die neue Methode Request.EnableBuffering() kann verwendet werden, um den Antwortstream auf einen FileBufferingReadStream zu aktualisieren, der Suchvorgänge und mehrere Lesevorgänge unterstützt.

Aktualisierte Middleware-Lösung

Die Integration der Anforderungspufferung in die Middleware ist relativ einfach. Der folgende Code zeigt, wie das geht:

<code class="language-csharp">public class ResponseRewindMiddleware
{
    private readonly RequestDelegate next;

    public ResponseRewindMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        Stream originalBody = context.Response.Body;

        try
        {
            using (var memStream = new MemoryStream())
            {
                context.Response.Body = memStream;

                await next(context);

                memStream.Position = 0;
                string responseBody = new StreamReader(memStream).ReadToEnd();

                memStream.Position = 0;
                await memStream.CopyToAsync(originalBody);
            }

        }
        finally
        {
            context.Response.Body = originalBody;
        }

    }
}</code>
Nach dem Login kopieren

Fazit

Das Ersetzen des Response.Body-Streams kann eine praktikable Möglichkeit sein, den Antwortstream mehrmals in der Middleware zu lesen. Die bevorzugte Methode besteht jedoch darin, Request.EnableBuffering() zu verwenden, um die Pufferung für den Antwortstream zu aktivieren.

Das obige ist der detaillierte Inhalt vonWie kann ich den ASP.NET Core Response.Body mehrmals in Middleware lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage