首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从响应对象中提取非字符串值

从响应对象中提取非字符串值
EN

Stack Overflow用户
提问于 2019-09-20 20:41:23
回答 1查看 119关注 0票数 0

APIM中,我希望在调用后端之前获取一个OAuth令牌,并将其存储在APIM缓存中。

我设法获得了OAuth令牌。

我希望将我的令牌存储在缓存中,因为我需要一个持续时间。从响应正文中提取持续时间是我的问题。

首先,我提取令牌和持续时间,将它们保存在变量中。然后,变量用于在高速缓存中存储值。

当提取"expires_in“的整数值时失败。

响应对象:

代码语言:javascript
复制
{
    "access_token": "accesstokenresponse",
    "token_type": "bearer",
    "expires_in": 3600
}

提取数据并放入变量中:

代码语言:javascript
复制
<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())" />

存储在缓存中:

代码语言:javascript
复制
<cache-store-value key="OAuthKey" 
    value="@((string)context.Variables["bearer-token"])"
    duration="@((int)context.Variables["expires-in"])" />

提取"expires_in“会导致对象引用没有被设置为对象的实例。

代码语言:javascript
复制
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."
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-21 00:27:41

也尝试在第一行使用(preserveContent: true)来保持对象的值,如下所示:

代码语言:javascript
复制
value="@(((IResponse)context.Variables["response"]).Body.As<JObject>(preserveContent:true)["access_token"].ToString())" />

如果问题解决了就告诉我。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58028605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档