gpt4 book ai didi

c# - 澄清如何使用 Microsoft.Graph 客户端更新(修补)对象

转载 作者:太空狗 更新时间:2023-10-29 21:38:23 24 4
gpt4 key购买 nike

以下代码是迄今为止我发现的使用 Microsoft Graph Client Library 更新对象的唯一方法

场景:

  1. 加载现有对象(组织)
  2. 修改值(在 securityComplianceNotificationPhones 中添加条目)
  3. 发送更新

代码

var client = new GraphServiceClient(...);

var org = client.Organization["orgid"].Request().GetAsync().Result;
var secPhones = new List<string>(org.SecurityComplianceNotificationPhones);
secPhones.Add("12345");

var patchOrg = new Organization();
patchOrg.SecurityComplianceNotificationPhones = secPhones;

var orgReq = new OrganizationRequest(
client.Organization[org.Id].Request().RequestUrl,
client, new Option[] {});
orgReq.UpdateAsync(patchOrg).Wait();

由于两件事,我需要使用 patchOrg 实例:

  1. Graph API documentation

    "In the request body, supply the values for relevant fields that should be updated. Existing properties that are not included in the request body will maintain their previous values or be recalculated based on changes to other property values. For best performance you shouldn't include existing values that haven't changed."

  2. 如果您确实确实包含未更改的现有值(即 assginedLicenses)请求失败,如果这些现有值是只读的。

我的问题是:是否有一种更直接的方法来更新现有对象,例如 Azure ActiveDirectory GraphClient 中的对象。 ?仅用于比较,Azure Active Directory Graph 中的相同场景

var client = new ActiveDirectoryClient(...);
var org = client.TenantDetails.GetByObjectId("orgid").ExecuteAsync().Result;
org.SecurityComplianceNotificationPhones.Add("12345");
org.UpdateAsync().Wait();

最佳答案

Graph 客户端库模型与您链接的 AAD 客户端库的旧 SDK 模型略有不同。旧模型传递的对象试图变得更聪明,并推理哪些属性被更改,只发送这些属性。该模型的主要缺点之一是,该库在后台进行了更多的服务调用,并且每次调用的有效负载都更重,因为 ExecuteAsync() 通常需要检索请求构建器链中的每个对象。新的库确实要求开发人员对正在传递的数据进行更明确的推理,但也可以更好地控制网络调用和有效负载。每种模型都有其权衡。

为了实现您想要的目标,我建议使用以下方法,而不是完全创建第二个组织对象:

var client = new GraphServiceClient(...);

var orgRequest = client.Organization["orgid"].Request();
var org = orgRequest.Select("securityComplianceNotificationPhones").GetAsync().Result;

var secPhones = new List<string>(org.SecurityComplianceNotificationPhones);
secPhones.Add("12345");

org.SecurityComplianceNotificationPhones = secPhones;

orgRequest.UpdateAsync(org).Wait();

关于c# - 澄清如何使用 Microsoft.Graph 客户端更新(修补)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com