使用Microsoft Graph API PATCH更新应用注册App Roles时JSON请求读取失败
解决"Unable to read JSON request payload"错误的方案
问题根源
你复制的请求体包含HTML转义的双引号("),同时命令中对变量的引用方式错误,导致JSON解析失败。
修正后的命令(PowerShell环境)
- 先修正请求体的转义字符,将
"替换为普通双引号,同时确保变量正确解析:
$graphApiUrl = "https://graph.microsoft.com/v1.0/applications/$($apiAppReg.appId)" # 修正JSON格式,直接使用标准双引号包裹属性 $body = '{ "appRoles": [ { "description": "Applications can read", "displayName": "Reader", "id": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxx", "isEnabled": false, "value": "Read", "allowedMemberTypes": ["Application"] } ] }' # 使用双引号传递body变量,确保变量值被正确解析 az rest --method PATCH --url $graphApiUrl --headers "Content-Type=application/json" --body "$body"
关键修正点
- 转义字符替换:把从Azure网站复制的
"全部替换为",保证JSON格式合法。 - 变量引用方式:PowerShell中必须用双引号包裹
--body "$body",单引号会将$body当作字面字符串传递,而非变量值。 - URL拼接优化:用PowerShell变量插值
$($apiAppReg.appId)简化URL拼接,避免字符串拼接错误。
后续删除角色步骤
禁用目标角色后,再次发送PATCH请求,将appRoles数组中对应角色移除即可:
# 若没有其他需要保留的角色,直接设为空数组;否则保留其他角色的完整JSON定义 $body = '{ "appRoles": [] }' az rest --method PATCH --url $graphApiUrl --headers "Content-Type=application/json" --body "$body"
注意:如果应用注册还有其他需保留的App Roles,不要直接设为空数组,需在
appRoles数组中保留这些角色的完整JSON对象,仅移除目标角色。
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

