.NET Core 获取HttpContext
HttpContext 在 .NET Core 中的获取方式有些不同,在Controller之外通过 HttpContext.Current 这种方式给单元测试造成较大困难,因此在 .NET Core 已经过时。需要通过以下两种方式获取
Controllers
[HttpGet]
public async Task<bool> LoggedIn()
{
var myUser = HttpContext.User;
return myUser.Identities.Any(x => x.IsAuthenticated);
}
Services
首先,在ConfigureServices方法中注册IHttpContextAccessor 作为service:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
然后,在Service中可以通过依赖注入获取:
public class UserService : IUserService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public bool IsUserLoggedIn()
{
var context = _httpContextAccessor.HttpContext;
return context.User.Identities.Any(x => x.IsAuthenticated);
}
}