1

步骤1:

使用 Microsoft.Graph 4.9.0 和 Microsoft.Graph.Core 2.0.5 SDK 创建 GraphServiceClient

var scopes = new[] { "https://graph.microsoft.com/.default" };
ClientSecretCredential clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret, new ClientSecretCredentialOptions()
{
     AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
});`


GraphServiceClient graphServiceClient = new GraphServiceClient(clientSecretCredential, scopes);

第2步:

并创建了一个自定义模式扩展,如下所示。

SchemaExtension schemaExtension = new SchemaExtension()
{
     Id = "data1",
     Description = "creating test schema extn",
     TargetTypes = new List<string>()
     {
         "User"
     },
     Properties = new List<ExtensionSchemaProperty>()
     {
         new ExtensionSchemaProperty()
         {
              Name ="prop1",
              Type ="String"
         }
     }
};

第 3 步:

将架构扩展状态更新为“可用”

var updatedExtn = await graphServiceClient
             .SchemaExtensions[schemaExtension.Id].Request()
             .UpdateAsync(new SchemaExtension()
             {
                 Status = "Available"
             });

第4步:

为扩展数据创建类

public class data1
{
    // You must serialize your property names to camelCase if your SchemaExtension describes as such.
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "prop1", Required = Newtonsoft.Json.Required.Default)]
    public string Prop1 { get; set; }
}

第 5 步:

找到用户并将创建的架构扩展添加到用户

IDictionary<string, object> extensionInstance = new Dictionary<string, object>();
// The below line is not working. but doesn't throw error
extensionInstance.Add(schemaExtension.Id, new data1 { prop1 = "testing" });

var usrCollection = await graphServiceClient.Users
           .Request()
           .Filter($"userPrincipalNames  eq '{adelev_Mail}'")
           .GetAsync();
 
var usr = usrCollection.FirstOrDefault();

if(usr != null)
{
     usr.AdditionalData.Add(extensionInstance);

     var updatedUser = await graphServiceClient.Users[usr.Id]
               .Request()
               .UpdateAsync(usr);
}

第 6 步:

当您尝试检索扩展名时,该值为 NULL。

User updatedUser = await graphServiceClient.Users[usr.Id].Request()
                .Select($"id, {schemaExtension.Id}")
                .GetAsync();

但它适用于使用 Graph Explorer 的 API。

PATCH https://graph.microsoft.com/v1.0/users/{userId}
{
    "extXXXXXXXX_data1":
     {
          "prop1" : "testing"
     }
}

如果我在这里遗漏任何东西,请告诉我。非常感谢这里的任何帮助。

4

1 回答 1

0

您应该访问有关AdditionalData财产的数据。尝试查看user.AdditionalData您的结果。这是我的示例的屏幕截图。

从图形资源管理器获取具有模式扩展的用户。 在此处输入图像描述

在使用 SDK 时,我在user.AdditionalData

在此处输入图像描述

检查此线程 - Graph SDK 和 SchemaExtensions了解详细信息。

于 2021-11-10T14:27:07.703 回答