以下代码是我到目前为止使用Microsoft Graph Client Library
更新对象的唯一方法情景:
代码
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 实例,因为有两件事:
&#34;在请求正文中,提供相关字段的值 应该更新。未包含在内的现有属性 请求正文将保持其先前的值或重新计算 基于对其他属性值的更改。为了获得最佳性能 不应该包含尚未改变的现有价值。&#34;
如果您确实执行包含尚未更改的现有值 (即assginedLicenses)请求失败,如果那些现有值 只读。
我的问题是:是否有更简单的方法来更新现有对象,例如Azure ActiveDirectory GraphClient?仅用于比较,Azure Active Directory图中的相同方案
var client = new ActiveDirectoryClient(...);
var org = client.TenantDetails.GetByObjectId("orgid").ExecuteAsync().Result;
org.SecurityComplianceNotificationPhones.Add("12345");
org.UpdateAsync().Wait();
答案 0 :(得分:5)
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();