Rumah >pembangunan bahagian belakang >C++ >Adakah terdapat cara yang lebih cekap untuk membaca Response.Body dalam ASP.NET Core daripada menggunakan pertukaran MemoryStream?
Membaca Respons Teras ASP.NET dengan Cekap. Badan: Alternatif kepada Pertukaran MemoryStream
Mengakses Response.Body
dalam ASP.NET Core, strim baca sahaja, memberikan cabaran. Walaupun menukarnya dengan MemoryStream
ialah penyelesaian biasa, ia tidak optimum. Artikel ini meneroka alternatif yang lebih cekap.
Masalahnya: Membaca terus Response.Body
bermasalah kerana sifat baca sahaja, direka untuk pengoptimuman prestasi dalam Teras ASP.NET.
Penyelesaian Tidak Cekap (MemoryStream Swapping): Pendekatan tradisional melibatkan penggantian Response.Body
dengan MemoryStream
, membaca kandungan, dan kemudian memulihkan strim asal. Ini intensif sumber dan berpotensi memberi kesan kepada prestasi.
Pendekatan Lebih Baik:
Walaupun pertukaran MemoryStream berfungsi, ia bukanlah kaedah yang paling berkesan. Pertimbangkan alternatif ini:
Response.Body
ke MemoryStream
buat sementara waktu, membaca kandungan dan kemudian memulihkan strim asal. Ini memastikan logik manipulasi aliran diasingkan dalam perisian tengah. Berikut ialah contoh ringkas:<code class="language-csharp">public class ResponseRewindMiddleware { private readonly RequestDelegate _next; public ResponseRewindMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(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); string responseBody = await reader.ReadToEndAsync(); memoryStream.Seek(0, SeekOrigin.Begin); await memoryStream.CopyToAsync(originalBody); context.Response.Body = originalBody; } }</code>
Response.Body
.Pertimbangan Penting:
Response.Body
akan memperkenalkan beberapa overhed prestasi. Gunakan teknik ini dengan bijak dan hanya apabila benar-benar perlu.try-catch
blok) adalah penting untuk mengelakkan pengecualian daripada mengganggu aplikasi.Dengan menggunakan perisian tengah atau cache respons (apabila sesuai), anda boleh meningkatkan kecekapan membaca Response.Body
dengan ketara berbanding teknik pertukaran langsung MemoryStream
. Ingat untuk menimbang dengan teliti implikasi prestasi sebelum melaksanakan penyelesaian ini.
Atas ialah kandungan terperinci Adakah terdapat cara yang lebih cekap untuk membaca Response.Body dalam ASP.NET Core daripada menggunakan pertukaran MemoryStream?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!