Azure AD GraphServiceClient 无法针对用户设置 AdditionalData
Azure AD GraphServiceClient can't set AdditionalData against User
我正在将 GraphServiceClient 与 .Net Core 2 一起使用。我正在尝试使用以下代码向我的用户添加附加数据
var updated = new User()
{
AdditionalData = new Dictionary<string, object>
{
{"OtherEmail", otherEmail},
{"OtherRole", otherRole}
},
};
await _graphClient.Users[user.Id].Request().UpdateAsync(updated);
执行时出现以下错误
Microsoft.Graph.ServiceException : Code: Request_BadRequest Message:
One or more property values specified are invalid.
有谁知道我做错了什么?
此外,如果有人可以告诉我如何只针对用户保存我自己的一些元数据,我们将不胜感激。我也试过使用扩展,但我遇到了这个问题。
所以我使用 OpenExtensions 解决了这个问题,这也给我带来了很多问题,可以在这里看到。
技巧是像这样添加扩展
extension = new OpenTypeExtension
{
ExtensionName = AzureADExtensions.UserConstants.ExtensionName,
AdditionalData = new Dictionary<string, object>
{
{"OtherEmail", externalUser.Email},
{"OtherRole" , externalUser.Roles.FirstOrDefault()}
}
};
await _graphClient.Users[user.Id].Extensions.Request()
.AddAsync(extension);
然后像这样检索它们。
user = await _graphClient
.Users[userId]
.Request()
.GetAsync();
// Note : you should be able to expand this on original request, but fails for me.
var extensions = await _graphClient.Users[user.Id].Extensions.Request().GetAsync();
user.Extensions = extensions;
希望对某人有所帮助!
要将属性添加到 AdditionalData
字段,您必须在 Azure AD B2C > 用户属性(在 Azure 门户中)中定义属性。例如,如果您创建一个 Boolean 属性 Dummy
,这将创建字段 extension_{b2c-extensions-app-id}_Dummy
,其中 {b2c-extensions-app-id}
是 Application ID 的自动生成的 b2c-extensions-app
可通过导航到 Azure AD B2C > 应用注册(预览版)> b2c-extensions-app 查看(-
) 从 ID!
中删除
这将允许您执行以下操作:
var updated = new User()
{
AdditionalData = new Dictionary<string, object>
{
{"extension_0000000000000000000000000000_Dummy", false}
},
};
await _graphClient.Users[user.Id].Request().UpdateAsync(updated);
我正在将 GraphServiceClient 与 .Net Core 2 一起使用。我正在尝试使用以下代码向我的用户添加附加数据
var updated = new User()
{
AdditionalData = new Dictionary<string, object>
{
{"OtherEmail", otherEmail},
{"OtherRole", otherRole}
},
};
await _graphClient.Users[user.Id].Request().UpdateAsync(updated);
执行时出现以下错误
Microsoft.Graph.ServiceException : Code: Request_BadRequest Message: One or more property values specified are invalid.
有谁知道我做错了什么?
此外,如果有人可以告诉我如何只针对用户保存我自己的一些元数据,我们将不胜感激。我也试过使用扩展,但我遇到了这个问题。
所以我使用 OpenExtensions 解决了这个问题,这也给我带来了很多问题,可以在这里看到。
技巧是像这样添加扩展
extension = new OpenTypeExtension
{
ExtensionName = AzureADExtensions.UserConstants.ExtensionName,
AdditionalData = new Dictionary<string, object>
{
{"OtherEmail", externalUser.Email},
{"OtherRole" , externalUser.Roles.FirstOrDefault()}
}
};
await _graphClient.Users[user.Id].Extensions.Request()
.AddAsync(extension);
然后像这样检索它们。
user = await _graphClient
.Users[userId]
.Request()
.GetAsync();
// Note : you should be able to expand this on original request, but fails for me.
var extensions = await _graphClient.Users[user.Id].Extensions.Request().GetAsync();
user.Extensions = extensions;
希望对某人有所帮助!
要将属性添加到 AdditionalData
字段,您必须在 Azure AD B2C > 用户属性(在 Azure 门户中)中定义属性。例如,如果您创建一个 Boolean 属性 Dummy
,这将创建字段 extension_{b2c-extensions-app-id}_Dummy
,其中 {b2c-extensions-app-id}
是 Application ID 的自动生成的 b2c-extensions-app
可通过导航到 Azure AD B2C > 应用注册(预览版)> b2c-extensions-app 查看(-
) 从 ID!
这将允许您执行以下操作:
var updated = new User()
{
AdditionalData = new Dictionary<string, object>
{
{"extension_0000000000000000000000000000_Dummy", false}
},
};
await _graphClient.Users[user.Id].Request().UpdateAsync(updated);