从响应对象中提取非字符串值
Extract non-string value from response object
在APIM
中我想在调用后端之前获取一个OAuth
令牌并将其存储在APIM
缓存中。
我设法获得了 OAuth
令牌。
我希望将我的令牌存储在缓存中,为此我需要一个持续时间。
从响应主体中提取持续时间是我的问题。
首先我提取令牌和持续时间以将它们保存在变量中。
然后变量用于在缓存中存储一个值。
提取 "expires_in" 的整数值时失败。
响应对象:
{
"access_token": "accesstokenresponse",
"token_type": "bearer",
"expires_in": 3600
}
正在提取数据并放入变量:
<set-variable name="bearer-token"
value="@(((IResponse)context.Variables["response"]).Body.As<JObject>()["access_token"].ToString())" />
<set-variable name="expires-in"
value="@(((IResponse)context.Variables["response"]).Body.As<JObject>(preserveContent: true)["expires_in"].ToString())" />
缓存中存储:
<cache-store-value key="OAuthKey"
value="@((string)context.Variables["bearer-token"])"
duration="@((int)context.Variables["expires-in"])" />
提取 "expires_in" 导致对象引用未设置为对象的实例。
set-variable (153.612 ms)
{
"messages": [
{
"message": "Expression evaluation failed.",
"expression": "((IResponse)context.Variables[\"response\"]).Body.As<JObject>(preserveContent: true)[\"expires_in\"].ToString()",
"details": "Object reference not set to an instance of an object."
},
"Expression evaluation failed. Object reference not set to an instance of an object.",
"Object reference not set to an instance of an object."
]
}
尝试在第一行也使用 (preserveContent: true) 来维护对象的值,因此:
value="@(((IResponse)context.Variables["response"]).Body.As<JObject>(preserveContent:true)["access_token"].ToString())" />
如果解决了请告诉我。
在APIM
中我想在调用后端之前获取一个OAuth
令牌并将其存储在APIM
缓存中。
我设法获得了 OAuth
令牌。
我希望将我的令牌存储在缓存中,为此我需要一个持续时间。 从响应主体中提取持续时间是我的问题。
首先我提取令牌和持续时间以将它们保存在变量中。 然后变量用于在缓存中存储一个值。
提取 "expires_in" 的整数值时失败。
响应对象:
{
"access_token": "accesstokenresponse",
"token_type": "bearer",
"expires_in": 3600
}
正在提取数据并放入变量:
<set-variable name="bearer-token"
value="@(((IResponse)context.Variables["response"]).Body.As<JObject>()["access_token"].ToString())" />
<set-variable name="expires-in"
value="@(((IResponse)context.Variables["response"]).Body.As<JObject>(preserveContent: true)["expires_in"].ToString())" />
缓存中存储:
<cache-store-value key="OAuthKey"
value="@((string)context.Variables["bearer-token"])"
duration="@((int)context.Variables["expires-in"])" />
提取 "expires_in" 导致对象引用未设置为对象的实例。
set-variable (153.612 ms)
{
"messages": [
{
"message": "Expression evaluation failed.",
"expression": "((IResponse)context.Variables[\"response\"]).Body.As<JObject>(preserveContent: true)[\"expires_in\"].ToString()",
"details": "Object reference not set to an instance of an object."
},
"Expression evaluation failed. Object reference not set to an instance of an object.",
"Object reference not set to an instance of an object."
]
}
尝试在第一行也使用 (preserveContent: true) 来维护对象的值,因此:
value="@(((IResponse)context.Variables["response"]).Body.As<JObject>(preserveContent:true)["access_token"].ToString())" />
如果解决了请告诉我。