C# Azure Active Directory用户(类型=具有现有用户帐户的用户)Json-to-List模型为空
我想将Json结果反序列化到一个模型中。 我正在使用Azure单点登录方法。当我在ad中使用新创建的用户(您组织中的新用户)登录时,我会获得正确的用户信息。但是,如果我在AzureAd中创建了一个新用户,并使用“具有现有用户帐户的用户”,我就可以登录,并且请求也可以通过身份验证。但我没有得到用户资料。用户配置文件为空。但“responseString”包含用户的所有值。有人能帮我吗C# Azure Active Directory用户(类型=具有现有用户帐户的用户)Json-to-List模型为空,c#,json,azure,single-sign-on,azure-active-directory,C#,Json,Azure,Single Sign On,Azure Active Directory,我想将Json结果反序列化到一个模型中。 我正在使用Azure单点登录方法。当我在ad中使用新创建的用户(您组织中的新用户)登录时,我会获得正确的用户信息。但是,如果我在AzureAd中创建了一个新用户,并使用“具有现有用户帐户的用户”,我就可以登录,并且请求也可以通过身份验证。但我没有得到用户资料。用户配置文件为空。但“responseString”包含用户的所有值。有人能帮我吗 UserProfile profile = JsonConvert.DeserializeObject<Us
UserProfile profile = JsonConvert.DeserializeObject<UserProfile>(responseString);
public class UserProfile
{
public string DisplayName { get; set; }
public string GivenName { get; set; }
public string Surname { get; set; }
}
实际上,您会得到不同的JSON。我简化了它们以显示问题。对于新用户,JSON如下所示:
{
"odata.metadata":"...Microsoft.WindowsAzure.ActiveDirectory.User/@Element",
"odata.type":"Microsoft.WindowsAzure.ActiveDirectory.User",
"displayName":"mahesh",
"givenName":"mahesh",
"surname":null
}
反序列化将适用于您的模型。但对于现有用户,JSON是:
{
"odata.metadata":"...Microsoft.WindowsAzure.ActiveDirectory.User",
"value":[
{
"odata.type":"Microsoft.WindowsAzure.ActiveDirectory.User",
"displayName":"mahesh",
"givenName":"map",
"surname":"map"
},
{ },
{ }
]
}
如您所见,您有一个值
属性,该属性包含一个用户数组。因此,为了能够对其进行反序列化,您需要创建新模型:
public class RootObject
{
public List<UserProfile> Value { get; set; }
}
公共类根对象
{
公共列表值{get;set;}
}
然后:
var obj = JsonConvert.DeserializeObject<RootObject>(json);
var obj=JsonConvert.DeserializeObject(json);
我与Azure Active Directory不相似,但您应该检查为什么odata.metadata属性对于这些响应是不同的。我得到了敬礼:)
在global.asax中添加此块
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
ClaimsIdentity id = ((ClaimsIdentity)User.Identity);
Claim claim = id.FindFirst(ClaimTypes.Email);
if (claim != null)
{
string email = claim.Value;
id.AddClaim(new Claim(ClaimTypes.Name, email));
}
}
请为这两种情况提供
responseString
示例。我已使用responseString@Aleksandr Ivanov进行了更新
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
ClaimsIdentity id = ((ClaimsIdentity)User.Identity);
Claim claim = id.FindFirst(ClaimTypes.Email);
if (claim != null)
{
string email = claim.Value;
id.AddClaim(new Claim(ClaimTypes.Name, email));
}
}