>백엔드 개발 >C++ >ASP.NET Core에서 Set-Only Response.Body 속성을 어떻게 읽을 수 있나요?

ASP.NET Core에서 Set-Only Response.Body 속성을 어떻게 읽을 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-08 16:34:41254검색

How Can I Read the Set-Only Response.Body Property in ASP.NET Core?

ASP.NET Core에서 Response.Body에 액세스: 실용 가이드

ASP.NET Core에서 Response.Body 속성을 ​​직접 읽는 것은 설정 전용으로 지정되어 있기 때문에 문제가 있습니다. 이는 응답 내용이 작성된 후 액세스해야 할 때 문제가 됩니다.

기존(이상적이지 않은) 접근 방식

현재 해결 방법에는 Response.BodyMemoryStream으로 바꾸고 콘텐츠를 문자열로 읽은 다음 원래 스트림을 복원하는 방법이 포함되는 경우가 많습니다. 이 방법은 기능적이지만 복잡성과 잠재적인 성능 오버헤드로 인해 최적이 아닙니다.

향상된 솔루션: 맞춤형 미들웨어

더 효율적인 솔루션은 사용자 정의 미들웨어를 활용하여 검색을 지원하는 버퍼링된 스트림을 생성합니다. 이는 이전 접근 방식의 불필요한 스트림 교환을 방지합니다. ASP.NET Core는 본질적으로 쓰기 후 응답 스트림 읽기를 지원하지 않지만 사용자 지정 미들웨어는 깔끔한 솔루션을 제공합니다.

미들웨어 구현 세부정보

다음 미들웨어는 프로세스를 단순화합니다.

<code class="language-csharp">public class ResponseCaptureMiddleware
{
    private readonly RequestDelegate _next;

    public ResponseCaptureMiddleware(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);
            string responseBody = new StreamReader(memoryStream).ReadToEnd();
            //Process responseBody here...

            memoryStream.Seek(0, SeekOrigin.Begin);
            await memoryStream.CopyToAsync(originalBody);
        }
    }
}</code>

이 미들웨어는 Response.BodyMemoryStream으로 일시적으로 대체하고 응답 콘텐츠를 캡처한 다음 해당 콘텐츠를 원본 스트림으로 리디렉션합니다. 결정적으로, 응답 콘텐츠(responseBody)는 미들웨어 내에서 처리가 가능합니다.

요약

Response.Body은 설정 전용이지만 사용자 정의 미들웨어 접근 방식을 사용하면 해당 콘텐츠에 액세스할 수 있습니다. 이 방법은 ASP.NET Core 애플리케이션에서 응답 스트림 조작을 처리하는 간소화되고 효율적인 방법을 제공합니다.

위 내용은 ASP.NET Core에서 Set-Only Response.Body 속성을 어떻게 읽을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.