将ASP.NET升级到ASP.NET Core之后,相信大家都会遇到HttpContext.Current无法使用的问题。这也是我们迁移ASP.NET Core必须解决的问题。
本文我们详细讨论一下,使用HttpContext的正确姿势。
先列一下使用HttpContext的具体场景:
1. 在Controller层访问HttpContext
2. 在中间件中使用HttpContext
3. 在数据访问层使用HttpContext
4. 在后台线程中访问HttpContext
5. 在Razor页面模型中访问HttpContext
6. 在Razor视图中访问HttpContext
可能还有其他的应用场景。接下来我们按场景一一示例解决。
首先本文用的是ASP.NET Core 3.1
一、新建一个ASP.NET Core Web应用程序
二、在Controller层访问HttpContext
示例代码中HomeController继承与Controller抽象类
Controller父类中继承与ControllerBase抽象类
其中ControllerBase抽象类有提供了对HttpContext的访问
所以,我们在Controller这一层可以按以下方式访问HttpContext:
1 public class HomeController : Controller 2 { 3 private readonly ILogger<HomeController> _logger; 4 private string customer; 5 6 public HomeController(ILogger<HomeController> logger) 7 { 8 _logger = logger; 9 10 customer = HttpContext.Request.Form["CustomerId"]; 11 } 12 }