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 중국어 웹사이트의 기타 관련 기사를 참조하세요!