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