public async Task<IHttpActionResult> ProvisionDevice(string deviceId)
        {
            var info = await _registry.FindAsync(deviceId);
            if (info == null)
            {
                return NotFound();
            }

            // If the device was revoked, restore it.
            if (info.Status.Equals(DeviceStateConstants.RevokedState, StringComparison.Ordinal))
            {
                await _provisioner.RestoreDeviceAsync(deviceId);
            }

            var token = await _provisioner.GetTokenAsync(deviceId);
            var endpoint = new DeviceEndpoint
            {
                Uri = _provisioner.EndpointUri.AbsoluteUri,
                EventHubName = _provisioner.EventHubName,
                AccessToken = token
            };

            // Update registry with new provisioning state.
            info.Status = DeviceStateConstants.ProvisionedState;
            await _registry.AddOrUpdateAsync(info);

            return Ok(endpoint);
        }
        public async Task<IHttpActionResult> ProvisionDevice([FromBody] Device device)
        {
            if (device == null)
            {
                return BadRequest("device is null");
            }
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var info = new DeviceInfo
            {
                DeviceId = device.DeviceId,
                Status = "provisioned"
            };

            await _registry.AddOrUpdate(info);

            var token = await _provisioner.GetTokenAsync(device.DeviceId);
            var endpoint = new DeviceEndpoint
            {
                Uri = _provisioner.EndpointUri.AbsoluteUri,
                EventHubName = _provisioner.EventHubName,
                AccessToken = token
            };

            return Ok(endpoint);
        }