Bagikan melalui


IHttpContextAccessor / HttpContext di aplikasi Blazor ASP.NET Core

Nota

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.

IHttpContextAccessor umumnya harus dihindari dengan penyajian interaktif karena HttpContext yang valid tidak selalu tersedia.

IHttpContextAccessor dapat digunakan selama penyajian sisi server statis (SSR statis), misalnya dalam komponen akar yang dirender secara statis, dan saat menggunakan handler token untuk panggilan API web di server. Sebaiknya hindari IHttpContextAccessor ketika SSR statis atau kode yang berjalan di server tidak dapat dijamin.

HttpContext dapat digunakan sebagai parameter kaskading hanya dalam root components yang dirender secara statis atau selama SSR statis untuk tugas umum, seperti memeriksa dan memodifikasi header atau properti lain dalam komponen App(App.razor). Nilainya adalah null selama rendering interaktif.

[CascadingParameter]
private HttpContext? HttpContext { get; set; }

Untuk konteks tambahan dalam kasus tepi tingkat lanjut†, lihat diskusi dalam artikel berikut ini:

†Kebanyakan pengembang yang membangun dan memelihara aplikasi Blazor tidak perlu mempelajari konsep tingkat lanjut ketika mengikuti panduan umum dalam artikel ini. Konsep terpenting yang perlu diingat adalah bahwa secara fundamental, HttpContext adalah fitur permintaan dan respons yang berbasis server yang biasanya hanya tersedia di server selama SSR statis dan hanya dibentuk ketika sirkuit pengguna sudah terbentuk.

Jangan atur atau ubah header setelah respons dimulai

Mencoba mengatur atau mengubah header setelah penyajian pertama (setelah respons dimulai) menghasilkan kesalahan:

System.InvalidOperationException: 'Headers are read-only, response has already started.'

Contoh situasi yang mengakibatkan kesalahan ini meliputi:

Untuk panduan tentang mengatur header sebelum respons dimulai, lihat startup ASP.NET CoreBlazor.

Jangan gunakan IHttpContextAccessor/HttpContext secara langsung atau tidak langsung di komponen Razor aplikasi Blazor sisi server. Blazor aplikasi berjalan di luar konteks alur ASP.NET Core. HttpContext tidak dijamin tersedia dalam IHttpContextAccessor, dan HttpContext tidak dijamin menyimpan konteks yang memulai aplikasi Blazor.

Pendekatan yang direkomendasikan untuk meneruskan status permintaan ke aplikasi Blazor adalah melalui parameter komponen akar selama penyajian awal aplikasi. Atau, aplikasi dapat menyalin data ke dalam layanan tercakup dalam peristiwa siklus hidup inisialisasi komponen akar untuk digunakan di seluruh aplikasi. Untuk informasi selengkapnya, lihat ASP.NET Core sisi server dan skenario keamanan tambahan Blazor Web App.

Aspek krusial dari keamanan Blazor di sisi server adalah bahwa pengguna yang terhubung dengan sirkuit tertentu mungkin akan diperbarui pada suatu titik setelah sirkuit Blazor ditetapkan, tetapi IHttpContextAccessortidak diperbarui. Untuk informasi selengkapnya tentang mengatasi situasi ini dengan layanan kustom, lihat ASP.NET Core di sisi server dan Blazor Web App skenario keamanan tambahan.

Untuk panduan tentang IHttpContextAccessor dan HttpContext di ASP.NET Core SignalR, lihat IHttpContextAccessor/HttpContext di ASP.NET Core SignalR.