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
Mary-Kate Olsenoriginal
2025-01-08 16:34:41253parcourir

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>

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!

Déclaration:
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