将IPrincipal转换为IClaimsPrincipal返回null

时间:2013-01-09 03:27:30

标签: asp.net-mvc-3 .net-4.0

我继承了来自代码(MVC网络应用程序)并且无法启动它。

这两行存在:

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

principalIPrincipal(在这种情况下是System.Security.Principal.WindowsPrincipal),并且不为空。

第一行将claimsPrincipal设置为null,因此抛出异常。我假设它必定在某个时候为某人工作,这是来自源代码管理的新副本。为什么这个演员会为我返回null?

2 个答案:

答案 0 :(得分:1)

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

在框架4.5或4.6中,您可以直接将System.Security.Principal.WindowsPrincipal转换为IClaimsPrincipal,因为第一个实现了第二个 var t = HttpContext.Current.User.Identity as WindowsIdentity; WindowsClaimsPrincipal wcp = new WindowsClaimsPrincipal(t); IClaimsPrincipal p = wcp as IClaimsPrincipal; 。但是在框架3.5或4.0中,你不能这样做,因为第一个没有实现第二个。它只是实现IPrinciple,而不是IClaimsPrincipal。您可以通过MSDN链接here查看。

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

"use strict";

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

答案 1 :(得分:0)

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

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