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

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

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

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

Accès à Response.Body dans ASP.NET Core : un guide pratique

La lecture directe de la propriété Response.Body dans ASP.NET Core est problématique car elle est désignée comme définie uniquement. Cela présente un défi lorsqu'il faut accéder au contenu de la réponse après sa rédaction.

Approche existante (moins qu'idéale)

Les solutions de contournement actuelles impliquent souvent de remplacer Response.Body par un MemoryStream, de lire le contenu dans une chaîne, puis de restaurer le flux d'origine. Cette méthode, bien que fonctionnelle, est loin d'être optimale en raison de sa complexité et de sa surcharge potentielle en termes de performances.

Solution améliorée : middleware personnalisé

Une solution plus efficace exploite un middleware personnalisé pour créer un flux mis en mémoire tampon qui prend en charge la recherche. Cela évite l’échange de flux inutile des approches précédentes. Bien qu'ASP.NET Core ne prenne pas automatiquement en charge la lecture du flux de réponse après l'écriture, un middleware personnalisé fournit une solution propre.

Détails de mise en œuvre du middleware

Le middleware suivant simplifie le processus :

<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>
Copier après la connexion

Ce middleware remplace temporairement Response.Body par un MemoryStream, capture le contenu de la réponse, puis redirige le contenu vers le flux d'origine. Surtout, le contenu de la réponse (responseBody) est disponible pour être traité au sein du middleware.

Résumé

Bien que Response.Body soit défini uniquement, l'accès à son contenu est réalisable en utilisant une approche middleware personnalisée. Cette méthode fournit un moyen simplifié et plus efficace de gérer la manipulation du flux de réponses dans les applications ASP.NET Core.

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