我继承了来自代码(MVC网络应用程序)并且无法启动它。
这两行存在:
var claimsPrincipal = principal as IClaimsPrincipal;
if (claimsPrincipal == null)
throw new ArgumentException("Cannot convert principal to IClaimsPrincipal.", "principal");
principal
是IPrincipal
(在这种情况下是System.Security.Principal.WindowsPrincipal
),并且不为空。
第一行将claimsPrincipal
设置为null,因此抛出异常。我假设它必定在某个时候为某人工作,这是来自源代码管理的新副本。为什么这个演员会为我返回null?
答案 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
接口。