2017-08-03 66 views
0

我正在嘗試使用C#的Autodesk forge API獲取集線器列表。 這是我迄今所做的: 使用Autodesk Forge API接收集線器列表

HubsApi api = new HubsApi(); 
Hubs hubs = api.GetHubs(); 

很簡單。但是當我這樣做時,我會得到一個例外,抱怨,不能將DynamicJsonResponse轉換爲Hubs。我想,這是因爲我在響應字符串中收到兩條警告,所以它不再是集線器對象。該警告是這樣的:

"warnings":[ 
     { 
      "Id":null, 
      "HttpStatusCode":"403", 
      "ErrorCode":"BIM360DM_ERROR", 
      "Title":"Unable to get hubs from BIM360DM EMEA.", 
      "Detail":"You don't have permission to access this API", 
      "AboutLink":null, 
      "Source":[ 

      ], 
      "meta":[ 

      ] 
     } 

所有這一切都被包裝在一個字典有四個條目,其中只有兩個是數據。但是,根據Autodesk的說法,這個警告可以忽略。

所以之後,我試圖將其轉換成一個解釋,只選擇數據輸入

HubsApi api = new HubsApi(); 
DynamicJsonResponse resp = api.GetHubs(); 
DynamicDictionary hubs = (DynamicDictionary)resp.Dictionary["data"]; 

然後,我通過它循環:

for(int i = 0; i < hubs.Dictionary.Count && bim360hub == null; i++) 
{ 
    string hub = hubs.Dictionary.ElementAt(i).ToString(); 
    [....] 
} 

但字符串hub不一個json-hub。它是一個看起來像這樣的數組:

[ 
    0, 
    { 
    "type": "hubs", 
    "id": "****", 
    "attributes": {...}, 
    "links": {...}, 
    "relationships": {...}, 
    } 
] 

而數組中的第二個元素是我的集線器。我知道,我如何選擇第二個元素。但要獲得樞紐清單一定要容易得多。 在引用它seemd與這些代碼簡單的兩行的示例:

HubsApi api = new HubsApi(); 
Hubs hubs = api.GetHubs(); 

任何想法,我如何管理讓我的樞紐?

回答

1

首先,可以考慮使用這些方法的異步版本,避免使用非異步調用,因爲它使你的桌面應用程序凍結(同時連接)或ASP.NET分配更多的資源。

以下functionthis sample的一部分,它列出了用戶帳戶下的所有集線器,項目和文件。這是一個開始的好地方。請注意,它將在TreeNode列表中組織集線器,它與jsTree兼容。

private async Task<IList<TreeNode>> GetHubsAsync() 
{ 
    IList<TreeNode> nodes = new List<TreeNode>(); 

    HubsApi hubsApi = new HubsApi(); 
    hubsApi.Configuration.AccessToken = AccessToken; 

    var hubs = await hubsApi.GetHubsAsync(); 
    string urn = string.Empty; 
    foreach (KeyValuePair<string, dynamic> hubInfo in new DynamicDictionaryItems(hubs.data)) 
    { 
    string nodeType = "hubs"; 
    switch ((string)hubInfo.Value.attributes.extension.type) 
    { 
     case "hubs:autodesk.core:Hub": 
     nodeType = "hubs"; 
     break; 
     case "hubs:autodesk.a360:PersonalHub": 
     nodeType = "personalhub"; 
     break; 
     case "hubs:autodesk.bim360:Account": 
     nodeType = "bim360hubs"; 
     break; 
    } 
    TreeNode hubNode = new TreeNode(hubInfo.Value.links.self.href, (nodeType == "bim360hubs" ? "BIM 360 Projects" : hubInfo.Value.attributes.name), nodeType, true); 
    nodes.Add(hubNode); 
    } 

    return nodes; 
} 
相關問題