Maison > développement back-end > C++ > Comment puis-je lire efficacement la propriété Response.Body dans ASP.NET Core ?

Comment puis-je lire efficacement la propriété Response.Body dans ASP.NET Core ?

Mary-Kate Olsen
Libérer: 2025-01-08 16:27:41
original
484 Les gens l'ont consulté

How Can I Efficiently Read the Response.Body Property in ASP.NET Core?

Accès à Response.Body dans ASP.NET Core : une approche raffinée

La lecture directe Response.Body dans ASP.NET Core présente des défis en raison de sa nature en écriture seule. Cependant, des méthodes efficaces existent pour récupérer son contenu.

S'attaquer aux méthodes inefficaces

Les solutions précédentes impliquant des MemoryStream remplacements, bien que fonctionnelles, introduisent une surcharge de performances. La méthode EnableRewind, applicable à Request.Body, est inefficace pour Response.Body.

Présentation d'une solution middleware rationalisée

La solution optimale utilise un middleware personnalisé, ResponseRewindMiddleware, pour gérer avec élégance Response.Body la lecture. Ce middleware intercepte le flux de réponse, le redirige temporairement vers un MemoryStream, traite la demande, lit le contenu MemoryStream, puis restaure de manière transparente le flux d'origine.

Mise en œuvre améliorée du middleware

Voici une implémentation améliorée du 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>
Copier après la connexion

Ce middleware capture efficacement le contenu de la réponse sans compromettre les performances ou l'intégrité des données. La chaîne responseBody capturée est facilement disponible pour un traitement ultérieur dans le middleware. Cette approche garantit un moyen propre et efficace d'accéder au contenu du corps de la réponse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal