ホームページ >バックエンド開発 >C++ >ASP.NET Core で Response.Body プロパティを効率的に読み取るにはどうすればよいですか?

ASP.NET Core で Response.Body プロパティを効率的に読み取るにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-08 16:27:41553ブラウズ

How Can I Efficiently Read the Response.Body Property in ASP.NET Core?

ASP.NET Core での Response.Body へのアクセス: 洗練されたアプローチ

ASP.NET Core で Response.Body を直接読み取ると、その書き込み専用の性質により課題が生じます。 ただし、そのコンテンツを取得する効率的な方法が存在します。

非効率な方法への対処

MemoryStream の置換を伴う以前のソリューションは、機能しますが、パフォーマンスのオーバーヘッドが生じます。 EnableRewind に適用できる Request.Body メソッドは、Response.Body には無効です。

合理化されたミドルウェア ソリューションの紹介

最適なソリューションでは、カスタム ミドルウェア ResponseRewindMiddleware を利用して、Response.Body の読み取りをエレガントに処理します。このミドルウェアは、応答ストリームをインターセプトし、一時的に MemoryStream にリダイレクトし、要求を処理して MemoryStream コンテンツを読み取り、元のストリームをシームレスに復元します。

強化されたミドルウェア実装

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>

このミドルウェアは、パフォーマンスやデータの整合性を損なうことなく、応答コンテンツを効率的にキャプチャします。 キャプチャされた responseBody 文字列は、ミドルウェア内でさらに処理するためにすぐに利用できます。 このアプローチにより、応答本文のコンテンツにアクセスするクリーンかつ効率的な方法が保証されます。

以上がASP.NET Core で Response.Body プロパティを効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。