ASP.NET Core での Response.Body へのアクセス: 洗練されたアプローチ
ASP.NET Core で Response.Body
を直接読み取ると、その書き込み専用の性質により課題が生じます。 ただし、そのコンテンツを取得する効率的な方法が存在します。
非効率な方法への対処
MemoryStream
の置換を伴う以前のソリューションは、機能しますが、パフォーマンスのオーバーヘッドが生じます。 EnableRewind
に適用できる Request.Body
メソッドは、Response.Body
には無効です。
合理化されたミドルウェア ソリューションの紹介
最適なソリューションでは、カスタム ミドルウェア ResponseRewindMiddleware
を利用して、Response.Body
の読み取りをエレガントに処理します。このミドルウェアは、応答ストリームをインターセプトし、一時的に MemoryStream
にリダイレクトし、要求を処理して MemoryStream
コンテンツを読み取り、元のストリームをシームレスに復元します。
強化されたミドルウェア実装
ResponseRewindMiddleware
の改良された実装は次のとおりです。
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); } } }
このミドルウェアは、パフォーマンスやデータの整合性を損なうことなく、応答コンテンツを効率的にキャプチャします。 キャプチャされた responseBody
文字列は、ミドルウェア内でさらに処理するためにすぐに利用できます。 このアプローチにより、応答本文のコンテンツにアクセスするクリーンかつ効率的な方法が保証されます。
以上がASP.NET Core で Response.Body プロパティを効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。