ASP.NET Core에서 Response.Body
속성을 직접 읽는 것은 설정 전용으로 지정되어 있기 때문에 문제가 있습니다. 이는 응답 내용이 작성된 후 액세스해야 할 때 문제가 됩니다.
현재 해결 방법에는 Response.Body
을 MemoryStream
으로 바꾸고 콘텐츠를 문자열로 읽은 다음 원래 스트림을 복원하는 방법이 포함되는 경우가 많습니다. 이 방법은 기능적이지만 복잡성과 잠재적인 성능 오버헤드로 인해 최적이 아닙니다.
더 효율적인 솔루션은 사용자 정의 미들웨어를 활용하여 검색을 지원하는 버퍼링된 스트림을 생성합니다. 이는 이전 접근 방식의 불필요한 스트림 교환을 방지합니다. 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.Body
을 MemoryStream
으로 일시적으로 대체하고 응답 콘텐츠를 캡처한 다음 해당 콘텐츠를 원본 스트림으로 리디렉션합니다. 결정적으로, 응답 콘텐츠(responseBody
)는 미들웨어 내에서 처리가 가능합니다.
Response.Body
은 설정 전용이지만 사용자 정의 미들웨어 접근 방식을 사용하면 해당 콘텐츠에 액세스할 수 있습니다. 이 방법은 ASP.NET Core 애플리케이션에서 응답 스트림 조작을 처리하는 간소화되고 효율적인 방법을 제공합니다.
위 내용은 ASP.NET Core에서 Set-Only Response.Body 속성을 어떻게 읽을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!