Mengakses Respons.Body dalam Teras ASP.NET: Pendekatan Yang Diperhalusi
Membaca terus Response.Body
dalam ASP.NET Core memberikan cabaran kerana sifat tulis sahaja. Walau bagaimanapun, kaedah yang cekap wujud untuk mendapatkan semula kandungannya.
Mengatasi Kaedah Tidak Cekap
Penyelesaian terdahulu yang melibatkan penggantian MemoryStream
, sementara berfungsi, memperkenalkan overhed prestasi. Kaedah EnableRewind
, terpakai untuk Request.Body
, tidak berkesan untuk Response.Body
.
Memperkenalkan Penyelesaian Perisian Tengah Diperkemas
Penyelesaian optimum menggunakan perisian tengah tersuai, ResponseRewindMiddleware
, untuk mengendalikan bacaan Response.Body
dengan elegan. Perisian tengah ini memintas strim respons, mengubah halanya buat sementara ke MemoryStream
, memproses permintaan, membaca kandungan MemoryStream
dan kemudian memulihkan strim asal dengan lancar.
Pelaksanaan Middleware Dipertingkat
Berikut ialah pelaksanaan yang dipertingkatkan 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>
Perisian tengah ini menangkap kandungan tindak balas dengan cekap tanpa menjejaskan prestasi atau integriti data. Rentetan responseBody
yang ditangkap sedia tersedia untuk pemprosesan selanjutnya dalam perisian tengah. Pendekatan ini memastikan cara yang bersih dan cekap untuk mengakses kandungan badan tindak balas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca Response.Body Property dengan Cekap dalam Teras ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!