APIM策略设置Authorization头报错:对象引用未设置到实例
错误原因
APIM中IResponse的Body流是一次性消费的:你已经通过<set-variable>将tokenResponse的Body读取为字符串并存入SavedResponse,此时Body流的指针已经移到末尾,再次调用Body.As<JObject>()会返回null,访问["access_token"]时自然触发空引用错误。
解决方案
方案1:从已保存的字符串变量解析JSON
直接使用已经存储的SavedResponse字符串解析JSON,避免重复读取响应流:
<set-header name="Authorization" exists-action="override"> <value>@("Bearer " + JObject.Parse((string)context.Variables["SavedResponse"])["access_token"].ToString())</value> </set-header>
方案2:缓存响应体以支持多次读取
如果需要保留原响应体的多次读取能力,在第一次解析时添加preserveContent: true参数,将响应体缓存到内存:
- 先缓存JSON对象:
<set-variable name="TokenJson" value="@(((IResponse)context.Variables["tokenResponse"]).Body.As<JObject>(preserveContent: true))" />
- 再设置Authorization头:
<set-header name="Authorization" exists-action="override"> <value>@("Bearer " + ((JObject)context.Variables["TokenJson"])["access_token"].ToString())</value> </set-header>
验证要点
- 确认
SavedResponse或TokenJson变量的跟踪内容中,确实包含access_token字段 - 确保token响应的Body是合法的JSON格式,无语法错误
内容的提问来源于stack exchange,提问作者Admins
相关产品推荐
相关产品推荐

