ste*_*boe 6 c# azure office365 azure-active-directory microsoft-graph
以下代码是我到目前为止使用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();
Run Code Online (Sandbox Code Playgroud)
我需要使用patchOrg实例,因为有两件事:
该图形API文档状态
"在请求正文中,提供应更新的相关字段的值.请求正文中未包含的现有属性将保留其先前的值,或者根据对其他属性值的更改重新计算.为获得最佳性能,您不应该包括尚未改变的现有值."
如果你真的这样做包括没有改变现有的值(即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();
Run Code Online (Sandbox Code Playgroud)
小智 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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1295 次 |
最近记录: |