我试图研究这个错误,但我没有找到任何有用的信息。我们有一个使用.Net 4的ASP.NET Web Api 1.0应用程序。我们将它升级到.Net 4.5.1,MVC 5,Web Api 2,并发现我们将用户分配给Thread.CurrentPrincipal的问题。 [Authorize]属性并尝试稍后提取该信息,但现在升级后,Thread.CurrentPrincipal将丢失。
public class OAuthBearer : AuthorizeAttribute
public override void OnAuthorization(HttpActionContext actionContext)
{
(...)
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity
(accessToken.ClientId, "OAuth Bearer"), accessToken.ApprovedScopes.ToArray());
(...)
}
}
以前在我们的控制器代码中,我们能够拉出Thread.CurrentPrincipal并将其设置为Generic Principal。但是现在我们升级后的Thread.CurrentPrincipal丢失了。
一种解决方法是将Generic Principal设置为HTTPContext.User,它似乎正确地传递给我们的控制器代码,但我读过Thread.CurrentPrincipal是您应该用于Web Api的。
任何帮助都将不胜感激。