首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将System.Security.Claims.ClaimsPrincipal类型的对象强制转换为Microsoft.IdentityModel.Claims.IClaimsPrincipal类型

无法将System.Security.Claims.ClaimsPrincipal类型的对象强制转换为Microsoft.IdentityModel.Claims.IClaimsPrincipal类型
EN

Stack Overflow用户
提问于 2014-03-10 23:49:07
回答 2查看 12.3K关注 0票数 9

我正在开发一个MVC4应用程序,它使用ADFS验证corp域用户,我已经编写了代码,我得到了如下错误,我没有得到索赔吗?

System.InvalidCastException:无法将'System.Security.Claims.ClaimsPrincipal‘类型的对象强制转换为'Microsoft.IdentityModel.Claims.IClaimsPrincipal'.类型

代码语言:javascript
复制
    public ActionResult Index()
    {
        try
        {

            IClaimsPrincipal principal = (IClaimsPrincipal)Thread.CurrentPrincipal;
            IClaimsIdentity identity = (IClaimsIdentity)principal.Identity;
            if (String.IsNullOrEmpty(identity.Claims[0].Value.Split('@')[0]))
            {
                ViewData["Message"] = string.Format("You are email is :{0}", identity.Claims[0].Value.Split('@')[0]);

            }
            else
            {
                ViewData["Message"] = "You are not getting any claims";
            }
        }
        catch (Exception ex)
        {
            ViewData["Message"] = "Something wrong.";
        }
        return View();
    }
EN

回答 2

Stack Overflow用户

发布于 2014-03-11 00:59:53

你观察到的是.NET 3.5WIF3.5WIF4 (Microsoft.IdentityModel)和WIF4.0 (System.IdentityModel & System.Security)的混合结果。我的建议是:

  1. 删除项目中对Microsoft.IdentityModel.*程序集的引用
  2. 添加对System.IdentityModel & System.IdentityModel.Services程序集的引用
  3. 修复使用语句

<代码>H19在Web.Config中修复对Microsoft.IdentityModel的引用<代码>H210<代码>G211

在执行此操作之前,请备份您的项目,因为如果您以前没有这样做过,您可能会出现很多错误,并且代码无法正常工作。但主要的想法是,你必须摆脱所有和任何Microsoft.IdentityModel引用,这样你就会变得很好。

票数 9
EN

Stack Overflow用户

发布于 2014-04-18 23:09:45

我能够按照astaykov的建议解决这个问题,并且我像下面这样修改了代码。

代码语言:javascript
复制
using System.Security.Claims;
var identity = User.Identity as ClaimsIdentity;         

        foreach (var claim in identity.Claims)
        {
            if (claim.Type.Contains("EmailAddress"))
            {
                ViewBag.EmailName = claim.Value;
            }
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22304869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档