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
Not
Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.
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();
}
}
Minimal API'lerden HttpContext erişimi
Minimal API'leri kullanmak için HttpContext, bir HttpContext parametresi 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 HttpContextkullanmak 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:
-
UserRepositorybağımlılığınıIHttpContextAccessorbildirir. - BAĞıMLıLıK, DI bağımlılık zincirini çözümleyip bir örneği
UserRepositoryoluş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 voidtanı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. 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)
Daha fazla bilgi için bkz. ASP.NET Core Blazor uygulamalarında IHttpContextAccessor/HttpContext.
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 HttpContextInvoke 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:
-
UserRepositorybağımlılığınıIHttpContextAccessorbildirir. - BAĞıMLıLıK, DI bağımlılık zincirini çözümleyip bir örneği
UserRepositoryoluş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 voidtanı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. 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 SendEmailCoreHttpContextgeç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)
Daha fazla bilgi için bkz. ASP.NET Core Blazor uygulamalarında IHttpContextAccessor/HttpContext.
ASP.NET Core