通常,将Web窗体或MVC5应用程序转换为ASP.NET Core 将需要 大量的重构。
HttpContext.Current已在ASP.NET Core中删除。从单独的类库访问当前HTTP上下文是ASP.NET
Core试图避免的混乱体系结构类型。有几种方法可以在ASP.NET Core中对其进行重新架构。
HttpContext属性
您可以通过
HttpContext任何控制器上的属性访问当前HTTP上下文。与原始代码示例最接近的事情是将其传递
HttpContext给您正在调用的方法:
public class HomeController : Controller{ public IActionResult Index() { MyMethod(HttpContext); // Other pre }}public void MyMethod(Microsoft.AspNetCore.Http.HttpContext context){ var host = $"{context.Request.Scheme}://{context.Request.Host}"; // Other pre}中间件中的HttpContext参数
如果您正在为ASP.NET Core管道编写自定义中间件,则当前请求
HttpContext将
Invoke自动传递到您的方法中:
public Task Invoke(HttpContext context){ // Do something with the current HTTP context...}HTTP上下文访问器
最后,您可以使用
IHttpContextAccessor帮助程序服务来获取由ASP.NET
Core依赖项注入系统管理的任何类中的HTTP上下文。当您拥有控制器使用的通用服务时,此功能很有用。
在构造函数中请求此接口:
public MyMiddleware(IHttpContextAccessor httpContextAccessor){ _httpContextAccessor = httpContextAccessor;}然后,您可以以安全的方式访问当前的HTTP上下文:
var context = _httpContextAccessor.HttpContext;// Do something with the current HTTP context...
IHttpContextAccessor默认情况下并不总是将其添加到服务容器中,因此
ConfigureServices为了安全起见将其注册:
public void ConfigureServices(IServiceCollection services){ services.AddHttpContextAccessor(); // if < .NET Core 2.2 use this //services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); // Other pre...}

![如何在ASP.NET Core中获取HttpContext.Current?[重复] 如何在ASP.NET Core中获取HttpContext.Current?[重复]](http://www.mshxw.com/aiimages/31/395402.png)
