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.
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.
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.
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.
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!