【问题标题】:Claims identity in ASP.NET在 ASP.NET 中声明身份
【发布时间】:2021-08-26 15:32:39
【问题描述】:

我的控制器中有以下代码,我们将用户 ID 从声明身份传递到 peoplesoft 服务。我尝试在本地运行它,但没有声称获取用户 ID,它失败了。

请让我知道当它在服务器上时用户 ID 的值是什么,以及我可以在本地主机上作为用户 ID 传递什么。

        var cp = (ClaimsIdentity)User.Identity;
        var userId = cp.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;
        
        try
        {

            var soapClient = Peoplesoft.SoapClient.Create<CI_SU_MY_STUDENT_PortTypeClient, CI_SU_MY_STUDENT_PortType>("CI_SU_MY_STUDENT_G", userId);

            var results = soapClient.CI_SU_MY_STUDENT_G(new Get__CompIntfc__SU_MY_STUDENTTypeShape
            {
                OPRID = new Peoplesoft.CsMyStudent.OPRIDTypeShape3 { Value = studentId }
            });

            resultString = Utilities.XmlObjectToJsonString(results);

        }

谢谢

【问题讨论】:

  • 您是否使用 Asp.net Core Identity?登录成功后,有没有给当前用户添加过Claim,可以分享一下相关代码吗?

标签: asp.net-mvc asp.net-core claims-based-identity


【解决方案1】:

试试这个:

var claimsIdentity = (ClaimsIdentity)User.Identity;
var claims = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
string userId = claims.Value;

【讨论】:

  • claimsIdentity.FindFirst(ClaimTypes.NameIdentifier) 返回 null 并接收 System.NullReferenceException: '对象引用未设置为对象的实例。对于claims.value
  • 用户登录了吗?
猜你喜欢
  • 2016-03-01
  • 2012-02-25
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2016-09-11
相关资源
最近更新 更多