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