在登录时,我得到的每个用户都会被分配一个公司ID作为声明。我可以毫无问题地在WebApiController中达到此声明。但是,如果我尝试在控制器方法之外访问它,那么 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();
}
}
HttpContext.Current 为空,因为您尝试从 HttpApplication 处理管道中访问它。
https://learn.microsoft.com/en-us/aspnet/mvc/overview/getting-started/lifecycle-of-an-aspnet-mvc-5-application/_static/lifecycle-of-an-aspnet-mvc-5-application1.pdf
一个简单的解决方案是将标识作为参数解析为帮助程序方法。