直接讀取 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中文網其他相關文章!