首頁 > 後端開發 > C++ > 如何有效率地讀取ASP.NET Core中的Response.Body屬性?

如何有效率地讀取ASP.NET Core中的Response.Body屬性?

Mary-Kate Olsen
發布: 2025-01-08 16:27:41
原創
484 人瀏覽過

How Can I Efficiently Read the Response.Body Property in ASP.NET Core?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板