Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Hozzáférés
Megjegyzés:
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
HttpContext beágyazza az egyes HTTP-kérésekre és -válaszokra vonatkozó összes információt. Az HttpContext példányt inicializálják, amikor egy HTTP-kérést fogadnak. A HttpContext példány elérhető köztes szoftver- és alkalmazás-keretrendszerek, például webes API-vezérlők, Razor Pages, SignalR gRPC stb.
A HTTP-kérésekkel és -válaszokkal való használatról HttpContext további információt a HttpContext használata a ASP.NET Core-ban című témakörben talál.
Hozzáférés HttpContext lapokról Razor
A Razor Pages PageModel a következő tulajdonságot PageModel.HttpContext teszi elérhetővé:
public class IndexModel : PageModel
{
public void OnGet()
{
var message = HttpContext.Request.PathBase;
// ...
}
}
Ugyanez a tulajdonság használható a megfelelő Razor lapnézetben:
@page
@model IndexModel
@{
var message = HttpContext.Request.PathBase;
// ...
}
Az MVC egy HttpContext nézetéből való hozzáférés Razor-hez
Az MVC-minta nézetei a nézet Razor tulajdonságán keresztül elérhetővé teszik a HttpContext. Az alábbi példa beolvassa az aktuális felhasználónevet egy intranetes alkalmazásban a Windows-hitelesítés használatával:
@{
var username = Context.User.Identity.Name;
// ...
}
Hozzáférés HttpContext vezérlőből
A vezérlők elérhetővé teszik a tulajdonságot ControllerBase.HttpContext :
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
// ...
return View();
}
}
Hozzáférés HttpContext minimális API-kból
A minimális API-kon való használathoz adjon hozzá egy HttpContext paramétert:
app.MapGet("/", (HttpContext context) => context.Response.WriteAsync("Hello World"));
Hozzáférés HttpContext köztes szoftverből
Ha HttpContext szeretné használni egyéni köztes szoftverösszetevőkből, használja a HttpContext paramétert, amelyet átadnak a Invoke vagy InvokeAsync metódushoz.
public class MyCustomMiddleware
{
// ...
public async Task InvokeAsync(HttpContext context)
{
// ...
}
}
Hozzáférés HttpContext -ból/-ből SignalR
A HttpContext forrásból való használathoz hívja meg a SignalR metódust a GetHttpContext következőn:
public class MyHub : Hub
{
public async Task SendMessage()
{
var httpContext = Context.GetHttpContext();
// ...
}
}
Hozzáférés HttpContext gRPC-metódusokból
A HttpContext használatához a gRPC-metódusokban lásd: Feloldás HttpContext a gRPC-metódusokban.
Hozzáférés HttpContext egyéni összetevőkből
Más keretrendszerek és egyéni összetevők esetében, amelyekhez HttpContexthozzáférés szükséges, az ajánlott módszer a függőségek regisztrálása a beépített Függőséginjektálási (DI) tárolóval. A DI-tároló azokat az IHttpContextAccessor osztályokat látja el, amelyek függőségként deklarálják azt a konstruktorokban:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddHttpContextAccessor();
builder.Services.AddTransient<IUserRepository, UserRepository>();
Az alábbi példában:
-
UserRepositorydeklarálja a függőségét aIHttpContextAccessor. - A függőség akkor lesz megadva, ha a DI feloldja a függőségi láncot, és létrehoz egy példányt.
UserRepository
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 hozzáférés háttérszálból
HttpContext nem szálbiztos. A kérés feldolgozásán kívül eső HttpContext tulajdonságok olvasása vagy írása a következőt eredményezheti NullReferenceException: .
Megjegyzés:
Ha az alkalmazás szórványos NullReferenceException hibákat okoz, tekintse át a kód azon részeit, amelyek elindítják a háttérfeldolgozást, vagy amelyek a kérés befejeződése után folytatják a feldolgozást. Keressen hibákat, mint például vezérlőmetódus definiálása async void-ként.
Az adatokkal végzett HttpContext háttérmunka biztonságos végrehajtásához:
- Másolja ki a szükséges adatokat a kérelem feldolgozása során.
- Adja át a másolt adatokat egy háttérfeladatnak.
-
Ne hivatkozzon adatokra
HttpContextpárhuzamos feladatokban. A párhuzamos feladatok megkezdése előtt bontsa ki a környezetből a szükséges adatokat.
A nem biztonságos kód elkerülése érdekében soha ne adjon át HttpContext olyan metódusnak, amelyhez háttérmunka tartozik. Adja át helyette a szükséges adatokat. Az alábbi példában a SendEmail hívja a SendEmailCoreAsync-et, hogy megkezdje egy e-mail küldését. A X-Correlation-Id fejléc értéke a SendEmailCoreAsync-hez van továbbítva ahelyett, hogy a HttpContext-hez. A kód végrehajtása nem vár SendEmailCoreAsync befejezésére.
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 összetevőkben Razor (Blazor)
További információ: IHttpContextAccessor/HttpContext a ASP.NET Core-alkalmazásokbanBlazor.
HttpContext beágyazza az egyes HTTP-kérésekre és -válaszokra vonatkozó összes információt. Az HttpContext példányt inicializálják, amikor egy HTTP-kérést fogadnak. A HttpContext példány elérhető köztes szoftver- és alkalmazás-keretrendszerek, például webes API-vezérlők, Razor Pages, SignalR gRPC stb.
A HTTP-kérésekkel és -válaszokkal való használatról HttpContext további információt a HttpContext használata a ASP.NET Core-ban című témakörben talál.
Hozzáférés HttpContext lapokról Razor
A Razor Pages PageModel a következő tulajdonságot PageModel.HttpContext teszi elérhetővé:
public class IndexModel : PageModel
{
public void OnGet()
{
var message = HttpContext.Request.PathBase;
// ...
}
}
Ugyanez a tulajdonság használható a megfelelő Razor lapnézetben:
@page
@model IndexModel
@{
var message = HttpContext.Request.PathBase;
// ...
}
Az MVC egy HttpContext nézetéből való hozzáférés Razor-hez
Az MVC-minta nézetei a nézet Razor tulajdonságán keresztül elérhetővé teszik a HttpContext. Az alábbi példa beolvassa az aktuális felhasználónevet egy intranetes alkalmazásban a Windows-hitelesítés használatával:
@{
var username = Context.User.Identity.Name;
// ...
}
Hozzáférés HttpContext vezérlőből
A vezérlők elérhetővé teszik a tulajdonságot ControllerBase.HttpContext :
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
// ...
return View();
}
}
Hozzáférés HttpContext köztes szoftverből
Egyéni köztes szoftverösszetevők használatakor HttpContext átadásra kerül a Invoke vagy InvokeAsync metódusba.
public class MyCustomMiddleware
{
public Task InvokeAsync(HttpContext context)
{
// ...
}
}
Hozzáférés HttpContext egyéni összetevőkből
Más keretrendszerek és egyéni összetevők esetében, amelyekhez HttpContexthozzáférés szükséges, az ajánlott módszer a függőségek regisztrálása a beépített Függőséginjektálási (DI) tárolóval. A DI-tároló azokat az IHttpContextAccessor osztályokat látja el, amelyek függőségként deklarálják azt a konstruktorokban:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddHttpContextAccessor();
services.AddTransient<IUserRepository, UserRepository>();
}
Az alábbi példában:
-
UserRepositorydeklarálja a függőségét aIHttpContextAccessor. - A függőség akkor lesz megadva, ha a DI feloldja a függőségi láncot, és létrehoz egy példányt.
UserRepository
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 hozzáférés háttérszálból
HttpContext nem szálbiztos. A kérés feldolgozásán kívül eső HttpContext tulajdonságok olvasása vagy írása a következőt eredményezheti NullReferenceException: .
Megjegyzés:
Ha az alkalmazás szórványos NullReferenceException hibákat okoz, tekintse át a kód azon részeit, amelyek elindítják a háttérfeldolgozást, vagy amelyek a kérés befejeződése után folytatják a feldolgozást. Keressen hibákat, mint például vezérlőmetódus definiálása async void-ként.
Az adatokkal végzett HttpContext háttérmunka biztonságos végrehajtásához:
- Másolja ki a szükséges adatokat a kérelem feldolgozása során.
- Adja át a másolt adatokat egy háttérfeladatnak.
-
Ne hivatkozzon adatokra
HttpContextpárhuzamos feladatokban. A párhuzamos feladatok megkezdése előtt bontsa ki a környezetből a szükséges adatokat.
A nem biztonságos kód elkerülése érdekében soha ne adja át a HttpContext egy háttérben dolgozó metódusnak. Adja át helyette a szükséges adatokat. Az alábbi példában SendEmailCore az e-mailek küldésének megkezdésére hívjuk meg. Az correlationId át van adva a SendEmailCore-nak, nem pedig a HttpContext-nak. A kód végrehajtása nem vár SendEmailCore befejezésére.
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 összetevőkben Razor (Blazor)
További információ: IHttpContextAccessor/HttpContext a ASP.NET Core-alkalmazásokbanBlazor.