APIM 出站策略在删除策略之后立即跳过策略

APIM Outbound policy skips policy immediately following a delete policy

任务和预期结果

我在 Azure API 管理中有以下出站策略。第一个删除 header(如果存在),第二个 returns 证书过期 date/time(我用于测试)。

问题

最初删除了几个 header,但我发现我的一些自定义出站 header 正在消失。

似乎是紧跟在 delete 操作之后的政策被跳过了。我已尝试更改顺序,但问题仍然存在。我还尝试通过添加单独的结束标记而不是 self-closing 来更改删除操作,但这也没有用。

我还从 API 管理中删除并重新创建了 API,但问题仍然存在。

代码与问题

这是因为我的代码中存在语法错误吗?

    <outbound>
        <base />
        <set-header name="x-ms-workflow-name" exists-action="delete" />
        <set-header name="Certificate-Expiration" exists-action="override">
            <value>@{
                    var response = context.Request.Certificate.NotAfter;
                    return response.ToString();
                  }</value>
        </set-header>
        <set-header name="Certificate-Thumbprint" exists-action="override">
            <value>@{
                    var response = context.Request.Certificate.Thumbprint;
                    return response.ToString();
                  }</value>
        </set-header>
        <set-header name="Certificate-Subject" exists-action="override">
            <value>@{
                    var response = context.Request.Certificate.PublicKey.Key.ToXmlString(false);
                    return response.ToString();
                  }</value>
        </set-header>
    </outbound>

我在我这边测试过,<set-header>exists-action="delete"exists-action="override" 的策略工作正常。下面的截图是我在我这边测试的:

您的问题是由代码 var response = context.Request.Certificate.NotAftervar response = context.Request.Certificate.Thumbprintvar response = context.Request.Certificate.PublicKey.Key.ToXmlString(false); 引起的。您需要先检查context.Request.Certificate是否有NotAfterThumbprintPublicKey,然后才能使用它们。

例如,当你想使用var response = context.Request.Certificate.Thumbprint;时,你需要检查Thumbprint是否存在。您可以编写如下代码: