ASP.NET Core의 Response.Body를 효율적으로 읽기: MemoryStream 스와핑의 대안
읽기 전용 스트림인 ASP.NET Core에서 Response.Body
에 액세스하는 것은 어려운 일입니다. MemoryStream
로 바꾸는 것이 일반적인 해결 방법이지만 최적은 아닙니다. 이 기사에서는 보다 효율적인 대안을 살펴봅니다.
문제: Response.Body
을 직접 읽는 것은 ASP.NET Core의 성능 최적화를 위해 설계된 읽기 전용 특성으로 인해 문제가 있습니다.
비효율적인 솔루션(MemoryStream 스와핑): 기존 접근 방식에서는 Response.Body
을 MemoryStream
으로 바꾸고 콘텐츠를 읽은 다음 원본 스트림을 복원합니다. 이는 리소스 집약적이며 잠재적으로 성능에 영향을 미칠 수 있습니다.
더 나은 접근 방식:
MemoryStream 교체는 작동하지만 가장 효율적인 방법은 아닙니다. 다음 대안을 고려하십시오.
Response.Body
을 MemoryStream
로 리디렉션하고 콘텐츠를 읽은 다음 원본 스트림을 복원합니다. 이는 미들웨어 내에서 스트림 조작 논리를 격리된 상태로 유지합니다. 다음은 간단한 예입니다.<code class="language-csharp">public class ResponseRewindMiddleware { private readonly RequestDelegate _next; public ResponseRewindMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(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); string responseBody = await reader.ReadToEndAsync(); memoryStream.Seek(0, SeekOrigin.Begin); await memoryStream.CopyToAsync(originalBody); context.Response.Body = originalBody; } }</code>
Response.Body
.중요 고려 사항:
Response.Body
을 가로채서 조작하는 모든 방법은 약간의 성능 오버헤드를 발생시킵니다. 이러한 기술은 꼭 필요한 경우에만 신중하게 사용하십시오.try-catch
블록)는 예외로 인해 애플리케이션이 중단되는 것을 방지하는 데 중요합니다.미들웨어나 응답 캐싱(해당되는 경우)을 사용하면 직접 Response.Body
교환 기술에 비해 MemoryStream
읽기 효율성을 크게 향상시킬 수 있습니다. 이러한 솔루션을 구현하기 전에 성능에 미치는 영향을 주의 깊게 평가하십시오.
위 내용은 MemoryStream 스와핑을 사용하는 것보다 ASP.NET Core에서 Response.Body를 읽는 더 효율적인 방법이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!