public static async Task <HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) { dynamic data = await req.Content.ReadAsAsync <object>(); // Get request body TtnEntity ttn = JsonConvert.DeserializeObject <TtnEntity>(data.ToString(), new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() }); if (!ValidTtnApplicationId(ttn.app_id)) { return(req.CreateResponse(HttpStatusCode.BadRequest)); } var result = DecodeRawData(ttn.payload_raw); string key = await GetDeviceKeyFromRegistry(ttn.hardware_serial); // get device key from IoT Hub Registry if (key == null) { return(req.CreateResponse(HttpStatusCode.BadRequest)); } await PostDataToIoTHub(host, key, result, ttn); log.Info($"device '{ttn.hardware_serial}', payload '{result}', port: {ttn.port}"); return(req.CreateResponse(HttpStatusCode.OK)); }
public static async Task <bool> PostDataToIoTHub(string host, string key, string payload, TtnEntity ttn) { string restUri = $"https://{host}/devices/{ttn.hardware_serial}/messages/events?api-version={iotHubApiVersion}"; var sasToken = GetDeviceSaSToken(host, ttn.hardware_serial, key); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", sasToken); client.DefaultRequestHeaders.Add("iothub-app-route-id", "ttn-" + ttn.app_id); var content = new StringContent(telemetry.ToJson(payload, ttn.port)); var response = await client.PostAsync(restUri, content); return(true); }