当前位置: 首页 > 知识库问答 >
问题:

将主eventmessage中的额外属性添加到IoT Hub时消息负载发生更改-(使用rest客户端)

濮阳弘扬
2023-03-14

我正在使用Azure sdk和rest客户端向IoT中心发送事件。

我必须使用IoT中心路由功能,所以我在发送到IotHub之前将添加属性添加到主负载

案例1:使用Azure SDK发送数据

事件模型

RealTimeMachineData realTimeData = new RealTimeMachineData();
realTimeData.Date = DateTime.UtcNow;          
realTimeData.MachineCode = "M1";

当我在服务总线资源管理器中看到此消息时,我看起来像这样

{
  "MachineCode": "M1",
  "Date": "2017-08-27T10:05:22.7063498Z",  
}

案例2:当我通过RESTAPI调用做同样的事情时

 HttpClient client = new HttpClient();

 string deviceId = "DemoDevice";
 string baseUrl = "https://******.azure-devices.net/devices/" + deviceId + "/messages/events?api-version=2016-02-03";
 client.BaseAddress = new Uri(baseUrl);

 var sas = @"SharedAccessSignature sr=********";
 client.DefaultRequestHeaders.Add("Authorization", sas);
 client.DefaultRequestHeaders.Accept.Add(new  MediaTypeWithQualityHeaderValue("application/json"));

   var message1 = new Microsoft.Azure.Devices.Client.Message(Encoding.ASCII.GetBytes(realTimeData.ToString()));
 message1.Properties.Add("Source", "AiR");


 HttpResponseMessage response = client.PostAsJsonAsync(baseUrl, message1).Result;

以这种方式发送事件后,当我检查消息到服务总线资源管理器时,它看起来像

我必须在流分析中使用这种方法,因为当通过rest客户端发送时,负载变得不同,所以面临很多问题。

在通过Rest客户端发送时,我是否做错了什么,或者我必须做些不同的事情?

共有1个答案

芮星海
2023-03-14

以下是修复方法:

var message1 = new StringContent(JsonConvert.SerializeObject(new RealTimeMachineData() { Date = DateTime.UtcNow, MachineCode = "M1" }));
client.DefaultRequestHeaders.Add("iothub-app-Source", "AiR");
 类似资料:
  • 我试图使用Keycloak rest API向特定用户添加客户端级别的角色。我在邮递员尝试这个,但不断得到404找不到。 https://{keycloak url}/auth/admin/realms/acme/users/b62dc517-0dd8-41ad-9d97-f385e507e279/role-mappings/clients/6b1f23b4-6bec-4873-a991-4b7e

  • 我在配置了DLQ的SQS队列上有一个lambda触发器。 当我的lambda失败时,来自队列的原始消息将被重定向到DLQ。现在我想添加更多的信息到这个原始的消息(如为什么有一个错误等)。我知道我不能修改原始消息,但我看到消息可以有额外的消息属性。 如何从lambda函数(NodeJS)使用/设置它们?

  • 有没有办法在Kafka消息有效载荷中添加时间戳标头?我想检查消息是何时在消费者端创建的,并基于此应用自定义逻辑。 编辑: 我试图找到一种方法,将一些自定义值(基本上是时间戳)附加到生产者发布的消息上,这样我就可以在特定的时间段内消费消息。现在Kafka只确保消息将按照它们被放入队列的顺序传递。但是在我的例子中,先前生成的记录可能在某个延迟之后到达(因此在时间T1生成的消息可能比在稍后时间T2生成的

  • 问题内容: 我在MVC 4程序中使用Json.net。 我有一个阶级的对象。 我做了: 现在,我想添加一个额外的属性,如成。 我如何使用Json.net实现这一目标? 问题答案: 您有几种选择。 正如@Manvik所建议的那样,最简单的方法就是在类中添加另一个属性并在序列化之前设置其值。 如果您不想这样做,那么下一个最简单的方法是将您的对象加载到中,追加新属性值,然后从那里写出JSON。这是一个简

  • 我有两个文件。一个位于内部,另一个位于我的.jar文件外部的一个名为的目录中。 据我所知,我的是从加载的。虽然在应用程序工作时,不使用其中的值。它们来自我的项目文件夹中的默认。我做错什么了吗?

  • 我正在使用Spring Boot hibernate制作一个书店rest api,我不知道该如何进行。因此,首先创建用户(使用此处未发布的DTO): 然后他可以登录并搜索他感兴趣的书籍。当他想订购时(使用POST和JSON包含他的书),他应该在我的客户实体中输入他的详细信息(使用DTO): 这是一个好方法吗?我不知道如何才能将用户和客户联系起来- 编辑:澄清: > 用户注册并且只有电子邮件和密码-