调用Canvas API PUT接口设置通知偏好操作失败问题咨询
问题原因排查
422 Unprocessable Entity 报错表示请求格式可被服务端识别,但参数内容/结构不符合接口要求,你的失败请求存在两个核心问题:
- 参数使用了中文全角双引号:
”immediately“中的全角引号无法被curl和服务端正常解析,会被识别为参数内容的一部分 - 参数结构不符合Canvas API规范:通知偏好更新接口要求参数携带通知类型的嵌套层级,你当前传的
notification_preferences[frequency]缺少对应通知类型的层级,服务端无法定位要修改的配置项
解决方案
方案1:表单格式传参(兼容原有写法)
直接修正引号和参数结构即可,示例如下:
curl.exe https://myschool.instructure.com/api/v1/users/33/communication_channels/38/notification_preferences/new_announcement -d "notification_preferences[new_announcement][frequency]=immediately" -X PUT -H "Authorization: Bearer token"
方案2:JSON格式传参(更稳定,避免转义问题)
指定请求头为JSON格式,传标准JSON结构的请求体,不同环境适配写法如下:
# 非Windows环境 curl.exe https://myschool.instructure.com/api/v1/users/33/communication_channels/38/notification_preferences/new_announcement \ -d '{"notification_preferences": {"new_announcement": {"frequency": "immediately"}}}' \ -X PUT \ -H "Authorization: Bearer token" \ -H "Content-Type: application/json" # Windows CMD环境 curl.exe https://myschool.instructure.com/api/v1/users/33/communication_channels/38/notification_preferences/new_announcement -d "{\"notification_preferences\": {\"new_announcement\": {\"frequency\": \"immediately\"}}}" -X PUT -H "Authorization: Bearer token" -H "Content-Type: application/json"
内容的提问来源于stack exchange,提问作者DA-IT
相关产品推荐
相关产品推荐

