You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.NET从Azure IoT Hub获取部署清单并实现配置复制部署的问题

解决Azure IoT Hub配置部署清单的.NET获取问题

需求:使用.NET复制、修改并部署Azure IoT Hub中的配置,但无法通过API获取部署清单(deployment_manifest.json),需将所选配置的部署清单以对象形式获取。

尝试的两种无效方法

方法1:请求返回Bad Request错误

调用非官方API端点导致请求无效:

private static string GetConfiguration(string iotHubName, string token)
{
    using var client = new HttpClient();

    client.DefaultRequestHeaders.Add("Authorization", token);

    var restUriGet = $"https://{iotHubName}/api/deploymentManifests/opcpublisher?api-version=2022-10-31-preview";

    using var resultGet = client.GetAsync(restUriGet).Result;
    return resultGet.StatusCode.ToString();
}

问题:/api/deploymentManifests并非Azure IoT Hub官方REST API的有效路径,因此返回400错误。

方法2:未提取部署清单内容

调用正确的配置端点,但仅返回状态码,未读取并解析响应中的部署清单:

private static string GetConfiguration(string iotHubName, string token)
{
    using var client = new HttpClient();

    client.DefaultRequestHeaders.Add("Authorization", token);

    var restUriGet = $"https://{iotHubName}/configurations/opcpublisher?api-version=2020-05-31-preview";

    using var resultGet = client.GetAsync(restUriGet).Result;
    return resultGet.StatusCode.ToString();
}

问题:代码只返回了HTTP状态码,没有读取响应正文;部署清单嵌套在配置响应的content.modulesContent字段中,需要解析提取。

正确的获取方案

方案1:通过REST API直接获取并解析

使用官方REST API端点/configurations/{configurationId},调用后解析响应中的部署清单字段:

using System.Net.Http.Json;
using Newtonsoft.Json.Linq;

private static async Task<JObject> GetDeploymentManifestAsync(string iotHubName, string token, string configurationId)
{
    using var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", token);

    var restUri = $"https://{iotHubName}/configurations/{configurationId}?api-version=2020-05-31-preview";
    var response = await client.GetAsync(restUri);
    response.EnsureSuccessStatusCode();

    var configuration = await response.Content.ReadFromJsonAsync<JObject>();
    // 提取部署清单对象
    return configuration["content"]["modulesContent"] as JObject;
}

方案2:使用Azure IoT Hub SDK(推荐)

使用Microsoft.Azure.Devices NuGet包提供的SDK,无需手动处理REST请求,直接获取配置并提取部署清单:

using Microsoft.Azure.Devices;

private static async Task<TwinCollection> GetDeploymentManifestViaSdkAsync(string iotHubConnectionString, string configurationId)
{
    var registryManager = RegistryManager.CreateFromConnectionString(iotHubConnectionString);
    var configuration = await registryManager.GetConfigurationAsync(configurationId);
    
    // ModulesContent即为部署清单对象
    return configuration.Content.ModulesContent;
}

说明:

  • 两种方案获取到的modulesContent(或ModulesContent)就是完整的部署清单JSON对象,可以直接反序列化为自定义类进行修改,之后再通过API或SDK重新部署。
  • SDK方案更简洁,自动处理授权和API细节,减少出错可能。

参考文档:微软IoT Hub服务配置REST API官方文档 / 程序化部署Azure IoT Edge部署清单技术教程

内容的提问来源于stack exchange,提问作者Victor Pieper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:02:56