我需要在控制器的构造函数中使用一些当前用户的数据来初始化存储库,但看起来不可能获取当前用户的数据,因为所有对象都可以提供有关用户的任何数据(例如HttpContext
或User
)在构造函数区域中为空。如何在构造函数中获取所需的数据,或者使用用户数据初始化存储库的任何其他方式?
您可以使用
IHttpContextAccessor
访问构造函数中的HttpContext
;
public class HomeController : Controller
{
public HomeController(IHttpContextAccessor httpContextAccessor)
{
var httpContext = httpContextAccessor.HttpContext;
}
}
如果您正在使用 ASP.NET Core 1.x 在启动类的配置方法中注册IHttpContextAccessor
,并且对于 ASP.NET Core 2.0,我认为这不是必需的。
services.TryAddScoped<IHttpContextAccessor, HttpContextAccessor>();
为什么在构造函数中?
有四种方法可以在 MVC 中获取当前用户的数据:
- 您可以为当前用户的数据创建会话(首选)
- 您可以将数据存储在本地存储中。
- 使用饼干。但这取决于用户浏览器中是否允许 cookie。
- MVC 提供 ViewBag。您可以使用它传递数据。