在 ASP.NET Core 中存取 Response.Body:一種改進的方法
由於其只寫性質,在 ASP.NET Core 中直接讀取 Response.Body
會帶來挑戰。 然而,有有效的方法來檢索其內容。
解低效方法
之前涉及MemoryStream
替換的解決方案雖然有效,但會帶來效能開銷。 EnableRewind
方法適用於Request.Body
,對Response.Body
無效。
引入簡化的中間件解決方案
最佳解決方案利用自訂中間件ResponseRewindMiddleware
來優雅地處理Response.Body
讀取。此中間件攔截回應流,暫時將其重定向到 MemoryStream
,處理請求,讀取 MemoryStream
內容,然後無縫恢復原始流。
增強的中間件實施
這是 ResponseRewindMiddleware
的改進實作:
<code class="language-csharp">public class ResponseRewindMiddleware { private readonly RequestDelegate _next; public ResponseRewindMiddleware(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); using (var reader = new StreamReader(memoryStream)) { var responseBody = await reader.ReadToEndAsync(); // Process responseBody here... } memoryStream.Seek(0, SeekOrigin.Begin); await memoryStream.CopyToAsync(originalBody); } } }</code>
此中間件可以有效地捕捉響應內容,而不會影響效能或資料完整性。 捕獲的 responseBody
字串可隨時在中間件中進一步處理。 這種方法確保了一種乾淨有效的方式來存取回應正文內容。
以上是如何有效率地讀取ASP.NET Core中的Response.Body屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!