微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。