在 ASP.NET Core 中存取 HttpContext:指南
ASP.NET Core 與前身不同,刪除了方便的 HttpContext.Current
屬性。本文概述了在 ASP.NET Core 應用程式中存取目前 HTTP 上下文的有效策略。
架構考量與重構
從較舊的 ASP.NET 版本遷移通常需要重構程式碼。 應重新考慮從單獨的類別庫直接存取 HttpContext
以維護 ASP.NET Core 的最佳實踐。
在控制器中使用 HttpContext
控制器提供對HttpContext
屬性的直接存取:
<code class="language-csharp">public class HomeController : Controller { public IActionResult Index() { MyMethod(HttpContext); // ... other controller logic ... } public void MyMethod(Microsoft.AspNetCore.Http.HttpContext context) { string host = $"{context.Request.Scheme}://{context.Request.Host}"; // ... process HTTP context data ... } }</code>
存取中間件中的 HttpContext
自訂中間件在其 HttpContext
方法中使用 Invoke
參數:
<code class="language-csharp">public async Task InvokeAsync(HttpContext context) { // Access and manipulate the HttpContext here... await _next(context); }</code>
利用 IHttpContextAccessor
對於透過依賴注入管理的類,IHttpContextAccessor
介面提供了一個解決方案:
<code class="language-csharp">public class MyService { private readonly IHttpContextAccessor _httpContextAccessor; public MyService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public void MyMethod() { var context = _httpContextAccessor.HttpContext; // ... use the HttpContext ... } }</code>
請記得在 IHttpContextAccessor
中的 ConfigureServices
方法中註冊 Startup.cs
:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddHttpContextAccessor(); // ... other service registrations ... }</code>
這些方法為 ASP.NET Core 中的 HttpContext.Current
提供了強大的替代方案,確保高效且合規地存取 HTTP 上下文資訊。
以上是去掉HttpContext.Current後,如何在ASP.NET Core中存取HttpContext?的詳細內容。更多資訊請關注PHP中文網其他相關文章!