我有一个入站策略,从上下文中提取用户电子邮件,如下所示:
<inbound>
<base />
<set-backend-service id="apim-generated-policy" backend-id="azure-func-staging" />
<set-header name="customer-email" exists-action="override">
<value>@(context.User.Email)</value>
</set-header>
</inbound>
但无论如何,我总是得到以下消息:
set-header (0.788 ms)
{
"messages": [
{
"message": "Expression evaluation failed.",
"expression": "context.User.Email",
"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."
]
}
你能帮我理解我做错了什么吗?
当您将开发人员的用户设置为请求的h标头时,您将添加以下内容到APIM策略:
这里您错过了返回策略代码中的语句:
<set-header name="customer-email" exists-action="override">
<value>@(context.User.Email)</value>
</set-header>
像下面这样修改上面的代码位并尝试:
<set-header name="user" exists-action="override">
<value>@{var usr = context.User;
return usr.Email;}</value>
</set-header>
有关context.user
示例的更多详细信息,请参阅此