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

cannot get the User Email from context in Azure API Management

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

 <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."
]

}

你能帮我理解我做错了什么吗?

当您将开发者的用户设置为请求的 hheader 时,您需要将以下内容添加到 APIM 政策:

这里你漏掉了政策代码中的return声明:

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