任务和预期结果
我在 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>
答案 0 :(得分:1)
我在我这边进行了测试,带有 <set-header>
和 exists-action="delete"
的策略 exists-action="override"
工作正常。下面的截图是我在我身边测试的:
您的问题是由代码 var response = context.Request.Certificate.NotAfter
、var response = context.Request.Certificate.Thumbprint
、var response = context.Request.Certificate.PublicKey.Key.ToXmlString(false);
引起的。您需要先检查context.Request.Certificate
是否有NotAfter
、Thumbprint
和PublicKey
,然后才能使用。
比如,当你想使用var response = context.Request.Certificate.Thumbprint;
时,你需要检查Thumbprint
是否存在。您可以编写如下代码: