0

我继承了来代码(一个 MVC Web 应用程序)并且无法启动它。

这两条线存在:

var claimsPrincipal = principal as IClaimsPrincipal;
if (claimsPrincipal == null)
    throw new ArgumentException("Cannot convert principal to IClaimsPrincipal.", "principal");

principal是一个IPrincipal(在这种情况下是 a System.Security.Principal.WindowsPrincipal),并且不为空。

第一行设置claimsPrincipal为 null,因此抛出异常。我假设它在某些时候一定对某人有用,这是来自源代码控制的新副本。为什么这个演员会为我返回 null ?

4

2 回答 2

1

我看到这个帖子是很久以前的了。但是我今天遇到了同样的问题,终于找到了解决方法。

在框架 4.5 或 4.6 中,您可以直接System.Security.Principal.WindowsPrincipal转换为IClaimsPrincipal,因为第一个实现了第二个。但是在框架 3.5 或 4.0 中,你不能这样做,因为第一个没有实现第二个。它只是实现了 IPrinciple,而不是 IClaimsPrincipal。您可以从此处的 MSDN 链接中看到它。

这是一种解决此问题并获取 IClaimsPrincipal 对象的方法。

            var t = HttpContext.Current.User.Identity as WindowsIdentity;
            WindowsClaimsPrincipal wcp = new WindowsClaimsPrincipal(t);
            IClaimsPrincipal p = wcp as IClaimsPrincipal;

HttpContext.Current.User 是一个WindowsPrincipal,最后可以得到IClaimPrincipal。

于 2015-12-23T03:10:31.560 回答
0

principal可能实际上是null。你调试了吗?

检查类型是否principal实现了IClaimsPrincipal接口。

于 2013-01-09T03:35:28.967 回答