如何修改Azure API基本策略而不完全覆盖它?

时间:2017-04-21 20:44:08

标签: azure azure-api-apps azure-api-management

在Azure API Management中,我正在尝试修改API中单个路由的CORS策略。我遇到的问题是我无法弄清楚如何修改BASE策略。 Azure似乎只是用新策略覆盖它。

简单的基本政策:

<policies>
<inbound>
    <cross-domain>
        <cross-domain-policy>
            <allow-http-request-headers-from domain="*" headers="*" />
        </cross-domain-policy>
    </cross-domain>
    <cors>
        <allowed-origins>
            <origin>*</origin>
        </allowed-origins>
        <allowed-methods>
            <method>*</method>
        </allowed-methods>
        <allowed-headers>
            <header>*</header>
        </allowed-headers>
    </cors>
</inbound>
<backend>
    <forward-request />
</backend>
<outbound>
</outbound>
</policies>

在特定路线中,我想修改<cors>部分以包含另一个政策,如下所示:

<policies>
<inbound>
    <base />
    <cors>
        <expose-headers>
            <header>Content-Disposition</header>
        </expose-headers>
    </cors>
</inbound>
</policies>

但是,Azure希望用这个覆盖基本CORS策略。我在文档中找不到关于如何修改/合并策略而不是批发替换它的任何内容。

那么,我将如何继承基本政策,但只需添加一个额外的<expose-headers>政策?

1 个答案:

答案 0 :(得分:1)

目前这是不可能的。它们的策略工作方式是一旦定义了请求范围(产品,API和操作匹配),就可以通过用上层策略替换所有标记来构建策略。产生的有效策略只是一个接一个执行的语句的平面列表。从这个意义上说,你无法控制较低级别的父级政策。

但是您可以在执行父策略之前始终插入内容。为此,只需在标记之前放置另一个完全指定的CORS策略,并在结果策略中首先执行它。

每个有效策略有多个CORS策略是可以的,它们将一个接一个地执行,并且第一个能够处理CORS调用(原点,方法,标题匹配)的策略将采取行动。