调用Azure IoT Hub REST API清除设备待发命令报InvalidProtocolVersion错误
Azure IoT Hub 清除设备云到设备消息接口返回InvalidProtocolVersion排查方案
这个错误基本都是请求构造不符合服务端预期导致的,和SAS Token权限关系不大,按以下顺序核对即可解决:
- 首先确认请求方法和路径完全正确
接口固定使用DELETE方法,路径格式严格为:https://<你的IoT Hub全称>.azure-devices.net/messages/devicebound/<目标设备ID>?api-version=2021-04-12
最常见的错误是把路径写成/devices/<设备ID>/messages/devicebound这类格式,服务端会把这类路径的请求路由到旧版协议处理入口,直接返回协议版本不匹配错误。 - 补全缺失的必填请求头
除了Authorization头存放SAS Token外,必须手动添加两个请求头,Postman默认发无Body的DELETE请求时经常漏带:Content-Type: application/jsonContent-Length: 0
注意这个接口不需要传任何请求体,不要在Body栏选form-data、x-www-form-urlencoded等格式,直接选none即可,多余的请求体内容也会触发协议解析错误。
- 确认api-version参数传递正确
api-version必须作为URL查询参数传递,不要放到请求头里,也不要使用带-preview后缀的预览版版本号,2021-04-12是目前该接口稳定兼容的版本,不要用2018年之前的旧版本号。 - 最后核对SAS权限
如果以上配置都对还是报错,再检查SAS Token是用IoT Hub的服务策略(Service权限)或者iothubowner策略生成的,设备级SAS、注册表只读权限的SAS调用该接口会报权限错误,不会返回协议版本类错误,这步放最后核对即可。
可直接对照的正确请求样例:
请求方法:DELETE
请求URL:https://your-hub-name.azure-devices.net/messages/devicebound/target-device-01?api-version=2021-04-12
请求头配置:Authorization: SharedAccessSignature sr=your-hub-name.azure-devices.net&sig=xxx&se=1735689600&skn=iothubowner Content-Type: application/json Content-Length: 0请求体:无
内容的提问来源于stack exchange,提问作者Antilope
相关产品推荐
相关产品推荐

