2017-03-15 68 views
0

在登录每个用户时,都会为CompanyId指定一个Claim。我可以没有问题在WebApiController中达到这个声明。但是如果我试图在控制器方法之外触及它,那么HttpContext.Current将变为null。Httpcontext.current在控制器外部为空

我该如何在控制器之外达到我的要求,或者我应该使用什么解决方案来处理我的身份识别?

public class ProductsController : ApiController 
{ 
    private readonly ProductRepository _productRepo = new ProductRepository(); 
    private readonly string companyId = MiniHelper.GetCompanyId(); 

    [Route("ProductList")] 
    [EnableQuery()] 
    public IQueryable<Product> GetProductList() 
    { 
     return _productRepo.GetProducts().AsQueryable().Where(u => u.UserId == companyId); 
    } 
} 

public static class MiniHelper 
{ 
    public static string GetCompanyId() 
    { 
     var identity = (ClaimsIdentity)HttpContext.Current.User.Identity; 
     if (identity == null) 
      return string.Empty; 
     return identity.Claims.Where(a => a.Type == "CompanyId").Select(v => v.Value).FirstOrDefault(); 
    } 
} 

回答