Lecture efficace du Response.Body d'ASP.NET Core : alternatives à l'échange de MemoryStream
Accéder à Response.Body dans ASP.NET Core, un flux en lecture seule, présente un défi. Bien que l'échanger avec un MemoryStream soit une solution de contournement courante, elle n'est pas optimale. Cet article explore des alternatives plus efficaces.

Le problème : La lecture directe Response.Body est problématique en raison de sa nature en lecture seule, conçue pour l'optimisation des performances dans ASP.NET Core.
La solution inefficace (MemoryStream Swapping) : L'approche traditionnelle consiste à remplacer Response.Body par un MemoryStream, à lire le contenu, puis à restaurer le flux d'origine. Cela nécessite beaucoup de ressources et a potentiellement un impact sur les performances.
De meilleures approches :
Bien que l'échange MemoryStream fonctionne, ce n'est pas la méthode la plus efficace. Considérez ces alternatives :
Response.Body vers un MemoryStream, lit le contenu, puis restaure le flux d'origine. Cela maintient la logique de manipulation du flux isolée au sein du middleware. Voici un exemple simplifié :<code class="language-csharp">public class ResponseRewindMiddleware
{
private readonly RequestDelegate _next;
public ResponseRewindMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(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);
string responseBody = await reader.ReadToEndAsync();
memoryStream.Seek(0, SeekOrigin.Begin);
await memoryStream.CopyToAsync(originalBody);
context.Response.Body = originalBody;
}
}</code>Response.Body.Considérations importantes :
Response.Body introduira une certaine surcharge de performances. Utilisez ces techniques judicieusement et uniquement lorsque cela est absolument nécessaire.try-catch blocs) est cruciale pour empêcher les exceptions de perturber l'application.En utilisant un middleware ou une mise en cache des réponses (le cas échéant), vous pouvez améliorer considérablement l'efficacité de la lecture Response.Body par rapport à la technique d'échange MemoryStream directe. N'oubliez pas de peser soigneusement les implications en termes de performances avant de mettre en œuvre ces solutions.
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!
La différence entre passerelle et routeur
Utilisation de la fonction sqrt en Java
Enregistrez-vous dans un emplacement virtuel sur DingTalk
Les moments WeChat ne peuvent pas être actualisés
ASUS x402c
La différence entre les notes de bas de page et les notes de fin
Comment convertir un singe en wav
Quels sont les paramètres du chapiteau ?