Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Toegang tot
Opmerking
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
HttpContext bevat alle informatie over een afzonderlijke HTTP-aanvraag en -reactie. Een HttpContext exemplaar wordt geïnitialiseerd wanneer een HTTP-aanvraag wordt ontvangen. Het HttpContext exemplaar is toegankelijk via middleware en app-frameworks, zoals Web API-controllers, Razor Pagina's, SignalRgRPC en meer.
Voor informatie over het gebruik van HttpContext bij een HTTP-aanvraag en -antwoord, zie HttpContext gebruiken in ASP.NET Core.
Toegang HttpContext van Razor Pagina's
Met de Razor pagina's PageModel wordt de PageModel.HttpContext eigenschap toegankelijk gemaakt:
public class IndexModel : PageModel
{
public void OnGet()
{
var message = HttpContext.Request.PathBase;
// ...
}
}
Dezelfde eigenschap kan worden gebruikt in de bijbehorende Razor paginaweergave:
@page
@model IndexModel
@{
var message = HttpContext.Request.PathBase;
// ...
}
Toegang HttpContext vanuit een Razor weergave in MVC
Razor weergaven in het MVC-patroon maken HttpContext zichtbaar via de RazorPage.Context eigenschap in de weergave. In het volgende voorbeeld wordt de huidige gebruikersnaam in een intranet-app opgehaald met behulp van Windows-verificatie:
@{
var username = Context.User.Identity.Name;
// ...
}
Toegang HttpContext vanaf een controller
Controllers maken de ControllerBase.HttpContext eigenschap beschikbaar:
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
// ...
return View();
}
}
Toegang krijgen tot HttpContext met minimale API's
Als u wilt gebruiken HttpContext vanuit minimale API's, voegt u een HttpContext parameter toe:
app.MapGet("/", (HttpContext context) => context.Response.WriteAsync("Hello World"));
Toegang tot HttpContext vanuit middleware
Als u wilt gebruiken HttpContext vanuit aangepaste middlewareonderdelen, gebruikt u de HttpContext parameter die is doorgegeven aan de Invoke of InvokeAsync methode:
public class MyCustomMiddleware
{
// ...
public async Task InvokeAsync(HttpContext context)
{
// ...
}
}
Toegang HttpContext vanaf SignalR
Om HttpContext van SignalR te gebruiken, roept u de GetHttpContext-methode aan op Hub.Context:
public class MyHub : Hub
{
public async Task SendMessage()
{
var httpContext = Context.GetHttpContext();
// ...
}
}
Toegang HttpContext via gRPC-methoden
Zie HttpContext om HttpContext vanuit gRPC-methoden te gebruiken.
Toegang HttpContext vanuit aangepaste onderdelen
Voor andere frameworks en aangepaste onderdelen waartoe toegang HttpContextis vereist, is de aanbevolen methode om een afhankelijkheid te registreren met behulp van de ingebouwde container voor afhankelijkheidsinjectie (DI ). De DI-container levert de IHttpContextAccessor aan klassen die deze declareren als een afhankelijkheid in hun constructors:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddHttpContextAccessor();
builder.Services.AddTransient<IUserRepository, UserRepository>();
In het volgende voorbeeld:
-
UserRepositorydeclareert de afhankelijkheid vanIHttpContextAccessor. - De afhankelijkheid wordt gespecificeerd wanneer DI de afhankelijkheidsketen doorloopt en een exemplaar van
UserRepositorycreëert.
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 toegang vanaf een achtergrondthread
HttpContext is niet draadveilig. Het lezen of schrijven van eigenschappen van de HttpContext buiten het verwerken van een aanvraag kan leiden tot een NullReferenceException.
Opmerking
Als uw app sporadische NullReferenceException fouten genereert, controleert u onderdelen van de code die de achtergrondverwerking starten of die doorgaan met verwerken nadat een aanvraag is voltooid. Zoek naar fouten, zoals het definiëren van een controllermethode als async void.
Achtergrondwerk veilig uitvoeren met HttpContext gegevens:
- Kopieer de vereiste gegevens tijdens de verwerking van de aanvraag.
- Geef de gekopieerde gegevens door aan een achtergrondtaak.
- Verwijs niet naar
HttpContextgegevens in parallelle taken. Pak de benodigde gegevens uit de context uit voordat u de parallelle taken start.
Om onveilige code te voorkomen, moet u nooit HttpContext doorgeven aan een methode die achtergrondtaken uitvoert. Geef in plaats daarvan de vereiste gegevens door. In het volgende voorbeeld roept SendEmailSendEmailCoreAsync aan om te starten met het versturen van een e-mail. De waarde van de X-Correlation-Id header wordt doorgegeven aan SendEmailCoreAsync in plaats van de HttpContext. Code-uitvoering wacht niet totdat SendEmailCoreAsync voltooid is
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 in Razor onderdelen (Blazor)
Zie IHttpContextAccessor/HttpContext in ASP.NET Core-apps Blazorvoor meer informatie.
HttpContext bevat alle informatie over een afzonderlijke HTTP-aanvraag en -reactie. Een HttpContext exemplaar wordt geïnitialiseerd wanneer een HTTP-aanvraag wordt ontvangen. Het HttpContext exemplaar is toegankelijk via middleware en app-frameworks, zoals Web API-controllers, Razor Pagina's, SignalRgRPC en meer.
Voor informatie over het gebruik van HttpContext bij een HTTP-aanvraag en -antwoord, zie HttpContext gebruiken in ASP.NET Core.
Toegang HttpContext van Razor Pagina's
Met de Razor pagina's PageModel wordt de PageModel.HttpContext eigenschap toegankelijk gemaakt:
public class IndexModel : PageModel
{
public void OnGet()
{
var message = HttpContext.Request.PathBase;
// ...
}
}
Dezelfde eigenschap kan worden gebruikt in de bijbehorende Razor paginaweergave:
@page
@model IndexModel
@{
var message = HttpContext.Request.PathBase;
// ...
}
Toegang HttpContext vanuit een Razor weergave in MVC
Razor weergaven in het MVC-patroon maken HttpContext zichtbaar via de RazorPage.Context eigenschap in de weergave. In het volgende voorbeeld wordt de huidige gebruikersnaam in een intranet-app opgehaald met behulp van Windows-verificatie:
@{
var username = Context.User.Identity.Name;
// ...
}
Toegang HttpContext vanaf een controller
Controllers maken de ControllerBase.HttpContext eigenschap beschikbaar:
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
// ...
return View();
}
}
Toegang tot HttpContext vanuit middleware
Wanneer u met aangepaste middlewarecomponenten werkt, wordt HttpContext doorgegeven aan de Invoke- of InvokeAsync-methode.
public class MyCustomMiddleware
{
public Task InvokeAsync(HttpContext context)
{
// ...
}
}
Toegang HttpContext vanuit aangepaste onderdelen
Voor andere frameworks en aangepaste onderdelen waartoe toegang HttpContextis vereist, is de aanbevolen methode om een afhankelijkheid te registreren met behulp van de ingebouwde container voor afhankelijkheidsinjectie (DI ). De DI-container levert de IHttpContextAccessor aan klassen die deze declareren als een afhankelijkheid in hun constructors:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddHttpContextAccessor();
services.AddTransient<IUserRepository, UserRepository>();
}
In het volgende voorbeeld:
-
UserRepositorydeclareert de afhankelijkheid vanIHttpContextAccessor. - De afhankelijkheid wordt gespecificeerd wanneer DI de afhankelijkheidsketen doorloopt en een exemplaar van
UserRepositorycreëert.
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 toegang vanaf een achtergrondthread
HttpContext is niet draadveilig. Het lezen of schrijven van eigenschappen van de HttpContext buiten het verwerken van een aanvraag kan leiden tot een NullReferenceException.
Opmerking
Als uw app sporadische NullReferenceException fouten genereert, controleert u onderdelen van de code die de achtergrondverwerking starten of die doorgaan met verwerken nadat een aanvraag is voltooid. Zoek naar fouten, zoals het definiëren van een controllermethode als async void.
Achtergrondwerk veilig uitvoeren met HttpContext gegevens:
- Kopieer de vereiste gegevens tijdens de verwerking van de aanvraag.
- Geef de gekopieerde gegevens door aan een achtergrondtaak.
- Verwijs niet naar
HttpContextgegevens in parallelle taken. Pak de benodigde gegevens uit de context uit voordat u de parallelle taken start.
Om onveilige code te voorkomen, geef nooit de HttpContext door aan een methode die achtergrondtaken uitvoert. Geef in plaats daarvan de vereiste gegevens door. In het volgende voorbeeld SendEmailCore wordt aangeroepen om een e-mailbericht te verzenden. De correlationId wordt doorgegeven aan SendEmailCore, niet de HttpContext. Code-uitvoering wacht niet totdat SendEmailCore voltooid is
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 in Razor onderdelen (Blazor)
Zie IHttpContextAccessor/HttpContext in ASP.NET Core-apps Blazorvoor meer informatie.