DeviceBridge/Controllers/MessagesController.cs (34 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Threading;
using System.Threading.Tasks;
using DeviceBridge.Models;
using DeviceBridge.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace DeviceBridge.Controllers
{
[Route("devices/{deviceId}/[controller]")]
[ApiController]
public class MessagesController : BaseController
{
private readonly IBridgeService _bridgeService;
public MessagesController(NLog.Logger logger, IBridgeService bridgeService)
: base(logger)
{
_bridgeService = bridgeService;
}
/// <summary>
/// Sends a device message to IoTHub.
/// </summary>
/// <remarks>
/// Example request:
///
/// POST /devices/{deviceId}/messages/events
/// {
/// "data": {
/// "temperature": 4.8,
/// "humidity": 31
/// }
/// }
/// .
/// </remarks>
/// <response code="200">Message sent successfully.</response>
[HttpPost]
[Route("events")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<ActionResult> SendMessage(string deviceId, MessageBody message, CancellationToken cancellationToken = default)
{
// Force timestamp to be interpreted as UTC.
if (message.CreationTimeUtc is DateTime)
{
message.CreationTimeUtc = DateTime.SpecifyKind((DateTime)message.CreationTimeUtc, DateTimeKind.Utc);
}
await _bridgeService.SendTelemetry(Logger, deviceId, message.Data, cancellationToken, message.Properties, message.ComponentName, message.CreationTimeUtc);
return Ok();
}
}
}