繁体   English   中英

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

[英]Clarification on how to update (patch) objects using the Microsoft.Graph Client

以下代码是我到目前为止使用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文档说明

    “在请求正文中,提供应更新的相关字段的值。请求正文中未包含的现有属性将保留其先前的值,或者根据对其他属性值的更改重新计算。为获得最佳性能,您不应该包括尚未改变的现有值。“

  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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM