Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ASP.NET Core'da erişim
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.
HttpContext tek bir HTTP isteği ve yanıtı hakkındaki tüm bilgileri kapsüller. HTTP HttpContext
isteği alındığında örnek başlatılır. Örneğe HttpContext
Web API denetleyicileri, SayfalarRazor, SignalR gRPC ve daha fazlası gibi ara yazılım ve uygulama çerçeveleri tarafından erişilebilir.
HTTP isteği ve yanıtıyla kullanma HttpContext
hakkında bilgi için bkz . ASP.NET Core'da HttpContext kullanma.
Sayfalardan HttpContext
Erişim Razor
Razor Pages PageModel özelliği kullanıma PageModel.HttpContext sunar:
public class IndexModel : PageModel
{
public void OnGet()
{
var message = HttpContext.Request.PathBase;
// ...
}
}
Aynı özellik ilgili Razor Sayfa Görünümünde kullanılabilir:
@page
@model IndexModel
@{
var message = HttpContext.Request.PathBase;
// ...
}
MVC'de bir HttpContext
görünümden erişim Razor
RazorMVC düzenindeki görünümler, görünümdeki HttpContext
özelliği aracılığıyla öğesini kullanıma sunarRazorPage.Context. Aşağıdaki örnek, Windows Kimlik Doğrulaması kullanarak intranet uygulamasındaki geçerli kullanıcı adını alır:
@{
var username = Context.User.Identity.Name;
// ...
}
Denetleyiciden erişim HttpContext
Denetleyiciler özelliğini kullanıma ControllerBase.HttpContext sunar:
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
// ...
return View();
}
}
En düşük API'lerden erişim HttpContext
En düşük API'lerden kullanmak HttpContext
için bir HttpContext
parametre ekleyin:
app.MapGet("/", (HttpContext context) => context.Response.WriteAsync("Hello World"));
Ara yazılımdan erişim HttpContext
Özel ara yazılım bileşenlerinden kullanmak HttpContext
için veya HttpContext
yöntemine geçirilen parametresini Invoke
kullanınInvokeAsync
:
public class MyCustomMiddleware
{
// ...
public async Task InvokeAsync(HttpContext context)
{
// ...
}
}
Erişim HttpContext
için SignalR
'den HttpContext
kullanmak SignalR için üzerinde yöntemini GetHttpContextçağırınHub.Context:
public class MyHub : Hub
{
public async Task SendMessage()
{
var httpContext = Context.GetHttpContext();
// ...
}
}
gRPC yöntemlerinden erişim HttpContext
gRPC yöntemlerinden kullanmak HttpContext
için bkzHttpContext
çözümleme.
Özel bileşenlerden erişim HttpContext
erişimi gerektiren diğer çerçeve ve özel bileşenler için HttpContext
önerilen yaklaşım, yerleşik Bağımlılık Ekleme (DI) kapsayıcısını kullanarak bir bağımlılığı kaydetmektir. DI kapsayıcısı, oluşturucularında IHttpContextAccessor
bağımlılık olarak bildiren tüm sınıflara sağlar:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddHttpContextAccessor();
builder.Services.AddTransient<IUserRepository, UserRepository>();
Aşağıdaki örnekte:
-
UserRepository
bağımlılığınıIHttpContextAccessor
bildirir. - BAĞıMLıLıK, DI bağımlılık zincirini çözümleyip bir örneği
UserRepository
oluşturduğunda sağlanır.
public class UserRepository : IUserRepository
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserRepository(IHttpContextAccessor httpContextAccessor) =>
_httpContextAccessor = httpContextAccessor;
public void LogCurrentUser()
{
var username = _httpContextAccessor.HttpContext.User.Identity.Name;
// ...
}
}
HttpContext
arka plan iş parçacığından erişim
HttpContext
iş parçacığı güvenli değildir. bir isteğin işlenmesi dışından HttpContext
okuma veya yazma özellikleri bir NullReferenceExceptionile sonuçlanabilir.
Not
Uygulamanız düzensiz NullReferenceException
hatalar oluşturuyorsa, kodun arka plan işlemeyi başlatan veya istek tamamlandıktan sonra işlemeye devam eden bölümlerini gözden geçirin. Denetleyici yöntemini olarak async void
tanımlama gibi hataları arayın.
Verilerle HttpContext
güvenli bir şekilde arka plan çalışması yapmak için:
- İstek işleme sırasında gerekli verileri kopyalayın.
- Kopyalanan verileri bir arka plan görevine geçirin.
- Paralel görevlerdeki verilere başvurmayın
HttpContext
. Paralel görevleri başlatmadan önce bağlamdan gereken verileri ayıklayın.
Güvenli olmayan kodu önlemek için arka plan çalışması yapar bir yönteme hiçbir zaman geçiş HttpContext
. Bunun yerine gerekli verileri geçirin. Aşağıdaki örnekte, SendEmail
e-posta göndermeye başlamak için çağrılar SendEmailCoreAsync
yapılır. üst bilgisinin X-Correlation-Id
değeri yerine SendEmailCoreAsync
öğesine HttpContext
geçirilir. Kod yürütmenin tamamlanmasını beklemez SendEmailCoreAsync
:
public class EmailController : Controller
{
public IActionResult SendEmail(string email)
{
var correlationId = HttpContext.Request.Headers["X-Correlation-Id"].ToString();
_ = SendEmailCoreAsync(correlationId);
return View();
}
private async Task SendEmailCoreAsync(string correlationId)
{
// ...
}
}
IHttpContextAccessor
/
HttpContext
bileşenlerde Razor (Blazor)
IHttpContextAccessor genellikle etkileşimli işlemede kullanılmaktan kaçınılmalıdır çünkü geçerli bir HttpContext her zaman mevcut değildir.
IHttpContextAccessor sunucuda statik olarak işlenen bileşenler için kullanılabilir. Ancak mümkünse bundan kaçınmanızı öneririz.
HttpContext, üst bilgileri veya bileşendeki diğer özellikleri () inceleme ve değiştirme gibi genel görevler için yalnızca statik olarak işlenmiş kök bileşenlerdeApp
basamaklı parametreComponents/App.razor
kullanılabilir. Değer her zaman null
etkileşimli işleme içindir.
[CascadingParameter]
public HttpContext? HttpContext { get; set; }
öğesinin HttpContext etkileşimli bileşenlerde gerekli olduğu senaryolar için verileri sunucudan kalıcı bileşen durumu aracılığıyla akışla aktarmanızı öneririz. Daha fazla bilgi için bkz . ASP.NET Core sunucu tarafı ve Blazor Web App ek güvenlik senaryoları.
Sunucu tarafı uygulamaların bileşenlerinde doğrudan veya dolaylı olarak kullanmayınIHttpContextAccessor./HttpContextRazorBlazor Blazor uygulamalar ASP.NET Core işlem hattı bağlamının dışında çalışır. HttpContext içinde kullanılabilir IHttpContextAccessorolması garanti edilmez ve HttpContext uygulamayı başlatan Blazor bağlamı tutması garanti edilmez.
İstek durumunu Blazor uygulamaya geçirmek için önerilen yaklaşım, uygulamanın ilk işlemesi sırasında kök bileşen parametrelerinden geçer. Alternatif olarak uygulama, kök bileşenin uygulama genelinde kullanılmak üzere başlatma yaşam döngüsü olayında verileri kapsamlı bir hizmete kopyalayabilir. Daha fazla bilgi için bkz . ASP.NET Core sunucu tarafı ve Blazor Web App ek güvenlik senaryoları.
Sunucu tarafı Blazor güvenliğinin kritik bir yönü, belirli bir bağlantı hattına bağlı olan kullanıcının, bağlantı hattı oluşturulduktan sonra Blazor bir noktada güncelleştirilebilir ancak IHttpContextAccessorgüncelleştirilmeyebilir. Özel hizmetlerle bu durumu ele alma hakkında daha fazla bilgi için bkz . ASP.NET Core sunucu tarafı ve Blazor Web App ek güvenlik senaryoları.
HttpContext tek bir HTTP isteği ve yanıtı hakkındaki tüm bilgileri kapsüller. HTTP HttpContext
isteği alındığında örnek başlatılır. Örneğe HttpContext
Web API denetleyicileri, SayfalarRazor, SignalR gRPC ve daha fazlası gibi ara yazılım ve uygulama çerçeveleri tarafından erişilebilir.
HTTP isteği ve yanıtıyla kullanma HttpContext
hakkında bilgi için bkz . ASP.NET Core'da HttpContext kullanma.
Sayfalardan HttpContext
Erişim Razor
Razor Pages PageModel özelliği kullanıma PageModel.HttpContext sunar:
public class IndexModel : PageModel
{
public void OnGet()
{
var message = HttpContext.Request.PathBase;
// ...
}
}
Aynı özellik ilgili Razor Sayfa Görünümünde kullanılabilir:
@page
@model IndexModel
@{
var message = HttpContext.Request.PathBase;
// ...
}
MVC'de bir HttpContext
görünümden erişim Razor
RazorMVC düzenindeki görünümler, görünümdeki HttpContext
özelliği aracılığıyla öğesini kullanıma sunarRazorPage.Context. Aşağıdaki örnek, Windows Kimlik Doğrulaması kullanarak intranet uygulamasındaki geçerli kullanıcı adını alır:
@{
var username = Context.User.Identity.Name;
// ...
}
Denetleyiciden erişim HttpContext
Denetleyiciler özelliğini kullanıma ControllerBase.HttpContext sunar:
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
// ...
return View();
}
}
Ara yazılımdan erişim HttpContext
Özel ara yazılım bileşenleriyle çalışırken veya HttpContext
Invoke
yöntemine InvokeAsync
geçirilir:
public class MyCustomMiddleware
{
public Task InvokeAsync(HttpContext context)
{
// ...
}
}
Özel bileşenlerden erişim HttpContext
erişimi gerektiren diğer çerçeve ve özel bileşenler için HttpContext
önerilen yaklaşım, yerleşik Bağımlılık Ekleme (DI) kapsayıcısını kullanarak bir bağımlılığı kaydetmektir. DI kapsayıcısı, oluşturucularında IHttpContextAccessor
bağımlılık olarak bildiren tüm sınıflara sağlar:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddHttpContextAccessor();
services.AddTransient<IUserRepository, UserRepository>();
}
Aşağıdaki örnekte:
-
UserRepository
bağımlılığınıIHttpContextAccessor
bildirir. - BAĞıMLıLıK, DI bağımlılık zincirini çözümleyip bir örneği
UserRepository
oluşturduğunda sağlanır.
public class UserRepository : IUserRepository
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserRepository(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void LogCurrentUser()
{
var username = _httpContextAccessor.HttpContext.User.Identity.Name;
service.LogAccessRequest(username);
}
}
HttpContext
arka plan iş parçacığından erişim
HttpContext
iş parçacığı güvenli değildir. bir isteğin işlenmesi dışından HttpContext
okuma veya yazma özellikleri bir NullReferenceExceptionile sonuçlanabilir.
Not
Uygulamanız düzensiz NullReferenceException
hatalar oluşturuyorsa, kodun arka plan işlemeyi başlatan veya istek tamamlandıktan sonra işlemeye devam eden bölümlerini gözden geçirin. Denetleyici yöntemini olarak async void
tanımlama gibi hataları arayın.
Verilerle HttpContext
güvenli bir şekilde arka plan çalışması yapmak için:
- İstek işleme sırasında gerekli verileri kopyalayın.
- Kopyalanan verileri bir arka plan görevine geçirin.
- Paralel görevlerdeki verilere başvurmayın
HttpContext
. Paralel görevleri başlatmadan önce bağlamdan gereken verileri ayıklayın.
Güvenli olmayan kodu önlemek için, arka plan çalışmasını sağlayan bir yönteme hiçbir zaman geçirmeyin HttpContext
. Bunun yerine gerekli verileri geçirin. Aşağıdaki örnekte, SendEmailCore
e-posta göndermeye başlamak için çağrılır.
correlationId
, yerine öğesine SendEmailCore
HttpContext
geçirilir. Kod yürütmenin tamamlanmasını beklemez SendEmailCore
:
public class EmailController : Controller
{
public IActionResult SendEmail(string email)
{
var correlationId = HttpContext.Request.Headers["x-correlation-id"].ToString();
_ = SendEmailCore(correlationId);
return View();
}
private async Task SendEmailCore(string correlationId)
{
// ...
}
}
IHttpContextAccessor
/
HttpContext
bileşenlerde Razor (Blazor)
geçerli bir HttpContext her zaman kullanılamadığından, IHttpContextAccessor genellikle etkileşimli işlemede kaçınılmalıdır.
IHttpContextAccessor sunucuda statik olarak işlenen bileşenler için kullanılabilir. Ancak mümkünse bundan kaçınmanızı öneririz.
HttpContext, üst bilgileri veya bileşendeki diğer özellikleri () inceleme ve değiştirme gibi genel görevler için yalnızca statik olarak işlenmiş kök bileşenlerdeApp
basamaklı parametreComponents/App.razor
kullanılabilir. Değer her zaman null
etkileşimli işleme içindir.
[CascadingParameter]
public HttpContext? HttpContext { get; set; }
öğesinin HttpContext etkileşimli bileşenlerde gerekli olduğu senaryolar için verileri sunucudan kalıcı bileşen durumu aracılığıyla akışla aktarmanızı öneririz. Daha fazla bilgi için bkz . ASP.NET Core sunucu tarafı ve Blazor Web App ek güvenlik senaryoları.
Sunucu tarafı uygulamaların bileşenlerinde doğrudan veya dolaylı olarak kullanmayınIHttpContextAccessor./HttpContextRazorBlazor Blazor uygulamalar ASP.NET Core işlem hattı bağlamının dışında çalışır. HttpContext içinde kullanılabilir IHttpContextAccessorolması garanti edilmez ve HttpContext uygulamayı başlatan Blazor bağlamı tutması garanti edilmez.
İstek durumunu Blazor uygulamaya geçirmek için önerilen yaklaşım, uygulamanın ilk işlemesi sırasında kök bileşen parametrelerinden geçer. Alternatif olarak uygulama, kök bileşenin uygulama genelinde kullanılmak üzere başlatma yaşam döngüsü olayında verileri kapsamlı bir hizmete kopyalayabilir. Daha fazla bilgi için bkz . ASP.NET Core sunucu tarafı ve Blazor Web App ek güvenlik senaryoları.
Sunucu tarafı Blazor güvenliğinin kritik bir yönü, belirli bir bağlantı hattına bağlı olan kullanıcının, bağlantı hattı oluşturulduktan sonra Blazor bir noktada güncelleştirilebilir ancak IHttpContextAccessorgüncelleştirilmeyebilir. Özel hizmetlerle bu durumu ele alma hakkında daha fazla bilgi için bkz . ASP.NET Core sunucu tarafı ve Blazor Web App ek güvenlik senaryoları.
ASP.NET Core