2016-04-04 64 views
0

我是新來的azure iot。我正嘗試在Azure iot hub中使用其餘api創建共享訪問策略。使用Rest API在Azure IoT Hub中創建共享訪問策略

https://management.azure.com/subscriptions/{subscription-Id}/resourceGroups/{group-name}/providers/Microsoft.Devices/IotHubs/{hub-name}?api-version=2016-02-03"); 

和我的Java代碼

 String policyold = "{\"tags\" : {}, \"location\": \"East Asia\",\"properties\" : \"authorizationPolicies\" : [{\"name\" : \"policy-namw\", \"primaryKey\" : \"{mykey}\" ,\"secondaryKey\" : \"secondary-key\" ,\"permissions\" :[\"ServiceConnect\" ,\"RegistryRead\" ,\"RegistryWrite\" ,\"DeviceConnect\"]}],\"eventHubEndpoints\" : { \"events\" : {\"messageRetentionInDays\":\"2\"}}}"; 


    StringEntity input1 = new StringEntity(policyold); 
    input1.setContentType("application/json"); 
    input1.setContentEncoding("UTF8"); 
    put.setEntity(input1); 

    put.setHeader("Authorization", token); 
    HttpResponse r2 = httpclient2.execute(put); 
    System.out.println(r2.getStatusLine()); 
    String content2 = EntityUtils.toString(r2.getEntity()); 
    org.json.JSONObject recvObj2 = new org.json.JSONObject(content2); 

,但我面臨的followiing錯誤。

HTTP/1.1 400 Bad Request {"error":{"code":"InvalidRequestContent","message":"The request content was invalid and could not be deserialized: 'Error converting value \"authorizationPolicies\" to type 'System.Collections.Generic.Dictionary`2[System.String,Newtonsoft.Json.Linq.JToken]'. Path 'properties', line 1, position 76.'."}} 

此外,我正在使用本教程。 https://msdn.microsoft.com/en-us/library/mt589015.aspx

任何人都可以幫助我解決這個問題嗎?

+0

我建議您可以查看Azure IoT中心Java SDK以簡化API調用。鏈接是在https://github.com/Azure/azure-iot-sdks/tree/master/java – juvchan

+0

是的,我試圖用它來創建共享訪問策略。但找不到任何代碼示例和文檔用於此目的。這就是爲什麼我結束了HTTP休息API。你可以參考一個嗎?謝謝 – Sadaf

回答

1

根據Azure IoTHub的官方文檔Common error codes,錯誤代碼400意味着「請求的主體無效;例如,它不能被解析,或者對象無法驗證。」。

我在你的代碼檢查policyold字符串值,然後我找到了JSON字符串錯過了所需的元素Sku name & Units。請仔細查看Json請求內容末尾下方元素的表格。

Azure IoTHub可以擁有多個共享訪問策略。

因此,如果在創建新的IoTHub時創建共享訪問策略,請使用REST API Create a new IoT Hub,否則請使用REST API Update metadata on an existing IoT Hub爲現有的IoTHub添加一個新的IoTHub。

+0

好的@PeterPan。 現在我改變了我的policyold字符串。字符串policyold =「{\」tags \「:{},\」location \「:\」East Asia \「,\」properties \「:\」authorizationPolicies \「:[{\」name \「: \「primary_key \」:\「{mykey} \」,\「secondarykey \」:\「secondary-key \」,\「permissions \」:[\「ServiceConnect \ 「RegistryRead \」,\「RegistryWrite \」,\「DeviceConnect \」]}],\「eventHubEndpoints \」:{\「events \」:{\「messageRetentionInDays \」:\「2 \」}}, SKU \ 「:{\」 名稱\ 「:\」 S1 \ 「\ 」容量\「:1}}」; 但仍面臨同樣的問題。 – Sadaf

+0

我正在使用更新元數據和現有IoT中心Rest API。 – Sadaf

+0

@Sadaf我建議你可以嘗試使用Java的Azure IoTHub SDK,因爲Juvchan在評論中說,並且使用Fiddler來捕獲HTTP請求和響應以瞭解REST API調用,因爲Java SDK包裝了相關的REST蜜蜂。 [可以參考Java的IoTHub教程](https://azure.microsoft.com/en-us/documentation/articles/iot-hub-java-java-getstarted/)。 –