簡體   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