无法从Azure API管理中的上下文获取用户电子邮件



我有一个入站策略,从上下文中提取用户电子邮件,如下所示:

<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示例的更多详细信息,请参阅

最新更新