
在 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中文網其他相關文章!