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

问题描述

任务和预期结果

我在 Azure API 管理中有以下出站策略。第一个删除标头(如果存在),第二个返回证书到期日期/时间(我用于测试)。

问题

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

似乎是在 delete 操作之后立即被跳过的策略。我已尝试更改顺序,但问题仍然存在。我还尝试通过添加单独的结束标记而不是自动关闭来更改删除操作,但这也不起作用。

我还从 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" 工作正常。下面的截图是我在我身边测试的: enter image description here

您的问题是由代码 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是否存在。您可以编写如下代码: enter image description here