Thread.CurrentPrincipal  ==改为==>  Thread.CurrentPrincipal

 

原因:

虽然HttpContext.Current.User 和  Thread.CurrentPrincipal 返回的都是 IPrincipal

但是异步方法之后,由于线程变化,HttpContext.Current 会变成null

所以 要用 Thread.CurrentPrincipal 取值

 

例子:

  var principal = HttpContext.Current != null ? HttpContext.Current.User : Thread.CurrentPrincipal;

 return (principal as ClaimsPrincipal)?.FindFirst("user_code")?.Value;