2015-08-16 42 views

回答

4

直接在你的依赖注射HttpContext是不推荐的方法。相反,你应该使用IHttpContextAccessor

public class MyComponent : IMyComponent { 
    private readonly IHttpContextAccessor contextAccessor; 

    public MyComponent(IHttpContextAccessor contextAccessor) { 
     this.contextAccessor = contextAccessor; 
    } 

    public string GetDataFromSession() { 
     return contextAccessor.HttpContext.Session.GetString(*KEY*); 
    } 
} 

这就是说,它通常并不需要在控制器,在那里你可以使用Context财产容易检索当前HttpContext

当然,由于创建控制器的方式,当您实例化控制器时,此属性不可用,因此不要尝试从构造函数访问它。在这种情况下,尝试重构代码以避免在那里访问HttpContext或使用IHttpContextAccessor作为替代。