Accès à HttpContext dans ASP.NET Core : meilleures pratiques
L'accès direct à HttpContext.Current
n'est pas recommandé dans ASP.NET Core en raison de complexités architecturales potentielles. Cet article explore des alternatives supérieures pour récupérer des informations de contexte HTTP.
Méthode 1 : accès direct dans les contrôleurs
Les contrôleurs ASP.NET Core offrent une approche simple. La HttpContext
propriété accorde un accès direct :
<code class="language-csharp">public class HomeController : Controller { public IActionResult Index() { // Access HttpContext directly string host = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}"; // ... further code utilizing HttpContext ... } }</code>
Méthode 2 : paramètre HttpContext dans le middleware
Les composants middleware personnalisés reçoivent HttpContext
comme paramètre dans leur méthode Invoke
:
<code class="language-csharp">public class MyMiddleware { public async Task InvokeAsync(HttpContext context) { // Access HttpContext within middleware string host = $"{context.Request.Scheme}://{context.Request.Host}"; // ... subsequent middleware operations ... await context.Next(); } }</code>
Méthode 3 : Utiliser IHttpContextAccessor
Pour accéder à HttpContext
à partir de services ou d'autres classes en dehors des contrôleurs et du middleware, utilisez le service IHttpContextAccessor
. Cela nécessite une injection de dépendances :
<code class="language-csharp">public class MyService { private readonly IHttpContextAccessor _httpContextAccessor; public MyService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public string GetHost() { // Access HttpContext via IHttpContextAccessor var context = _httpContextAccessor.HttpContext; return context == null ? null : $"{context.Request.Scheme}://{context.Request.Host}"; } }</code>
Pensez à vous inscrire IHttpContextAccessor
dans votre méthode ConfigureServices
:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddHttpContextAccessor(); // ... other service registrations ... }</code>
Le choix de la méthode appropriée dépend du contexte. Les contrôleurs utilisent un accès direct ; le middleware utilise le paramètre HttpContext
; et pour les services, IHttpContextAccessor
est la solution privilégiée. Cela garantit un code plus propre et plus maintenable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!