> 백엔드 개발 > C++ > MemoryStream 스와핑을 사용하는 것보다 ASP.NET Core에서 Response.Body를 읽는 더 효율적인 방법이 있습니까?

MemoryStream 스와핑을 사용하는 것보다 ASP.NET Core에서 Response.Body를 읽는 더 효율적인 방법이 있습니까?

Linda Hamilton
풀어 주다: 2025-01-08 16:16:50
원래의
851명이 탐색했습니다.

ASP.NET Core의 Response.Body를 효율적으로 읽기: MemoryStream 스와핑의 대안

읽기 전용 스트림인 ASP.NET Core에서 Response.Body에 액세스하는 것은 어려운 일입니다. MemoryStream로 바꾸는 것이 일반적인 해결 방법이지만 최적은 아닙니다. 이 기사에서는 보다 효율적인 대안을 살펴봅니다.

Is there a more efficient way to read Response.Body in ASP.NET Core than using MemoryStream swapping?

문제: Response.Body을 직접 읽는 것은 ASP.NET Core의 성능 최적화를 위해 설계된 읽기 전용 특성으로 인해 문제가 있습니다.

비효율적인 솔루션(MemoryStream 스와핑): 기존 접근 방식에서는 Response.BodyMemoryStream으로 바꾸고 콘텐츠를 읽은 다음 원본 스트림을 복원합니다. 이는 리소스 집약적이며 잠재적으로 성능에 영향을 미칠 수 있습니다.

더 나은 접근 방식:

MemoryStream 교체는 작동하지만 가장 효율적인 방법은 아닙니다. 다음 대안을 고려하십시오.

  1. 응답 본문 되감기 미들웨어 사용: 사용자 정의 미들웨어는 더 깨끗하고 유지 관리하기 쉬운 솔루션을 제공합니다. 이 미들웨어는 응답을 가로채고 일시적으로 Response.BodyMemoryStream로 리디렉션하고 콘텐츠를 읽은 다음 원본 스트림을 복원합니다. 이는 미들웨어 내에서 스트림 조작 논리를 격리된 상태로 유지합니다. 다음은 간단한 예입니다.
<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>
로그인 후 복사
  1. 응답 캐싱 활용(해당하는 경우): 응답 콘텐츠가 정적이거나 자주 액세스되는 경우 응답 캐싱 구현을 고려하세요. 이렇게 하면 반복적으로 읽고 처리하는 것을 방지할 수 있습니다 Response.Body.

중요 고려 사항:

  • 성능에 미치는 영향:Response.Body을 가로채서 조작하는 모든 방법은 약간의 성능 오버헤드를 발생시킵니다. 이러한 기술은 꼭 필요한 경우에만 신중하게 사용하십시오.
  • 오류 처리: 강력한 오류 처리(예: try-catch 블록)는 예외로 인해 애플리케이션이 중단되는 것을 방지하는 데 중요합니다.
  • 대안: 스트림 조작에 의지하기 전에 전용 로깅 메커니즘을 사용하거나 전체 본문 대신 응답 헤더에 액세스하는 등 다른 방법을 통해 목표를 달성할 수 있는지 살펴보세요.

미들웨어나 응답 캐싱(해당되는 경우)을 사용하면 직접 Response.Body 교환 기술에 비해 MemoryStream 읽기 효율성을 크게 향상시킬 수 있습니다. 이러한 솔루션을 구현하기 전에 성능에 미치는 영향을 주의 깊게 평가하십시오.

위 내용은 MemoryStream 스와핑을 사용하는 것보다 ASP.NET Core에서 Response.Body를 읽는 더 효율적인 방법이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿