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

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

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

How Can I Read the Set-Only Response.Body Property in ASP.NET Core?

ASP.NET Core での Response.Body へのアクセス: 実践ガイド

ASP.NET Core で Response.Body プロパティを直接読み取ると、セット専用として指定されているため問題が発生します。 これは、応答コンテンツが書き込まれた後にアクセスする必要がある場合に課題となります。

既存の (理想的とは言えない) アプローチ

現在の回避策では、多くの場合、Response.BodyMemoryStream に置き換え、コンテンツを文字列に読み取り、元のストリームを復元します。 この方法は機能しますが、その複雑さとパフォーマンスのオーバーヘッドの可能性があるため、最適とは言えません。

改善されたソリューション: カスタムミドルウェア

より効率的なソリューションでは、カスタム ミドルウェアを活用して、シークをサポートするバッファリングされたストリームを作成します。これにより、以前のアプローチの不必要なストリーム スワップが回避されます。 ASP.NET Core は本質的に書き込み後の応答ストリームの読み取りをサポートしていませんが、カスタム ミドルウェアはクリーンなソリューションを提供します。

ミドルウェア実装の詳細

次のミドルウェアはプロセスを簡素化します:

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

このミドルウェアは、Response.Body を一時的に MemoryStream に置き換え、応答コンテンツをキャプチャし、そのコンテンツを元のストリームにリダイレクトします。 重要なのは、応答コンテンツ (responseBody) がミドルウェア内で処理できることです。

概要

Response.Body は設定専用ですが、その内容へのアクセスはカスタム ミドルウェア アプローチを使用して実現できます。このメソッドは、ASP.NET Core アプリケーションで応答ストリームの操作を処理するための合理化されたより効率的な方法を提供します。

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

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