如何在不完全覆盖的情况下修改 Azure API 基本策略?

How can I modify Azure API base policy without completely overwriting it?

在 Azure API 管理中,我正在尝试修改 API 中单个路由的 CORS 策略。我遇到的问题是我不知道如何修改 BASE 策略。 Azure 似乎只是用新策略覆盖它。

简单的 BASE 策略:

<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 策略。我在文档中找不到任何关于如何 modify/merge 政策而不是批量替换它的内容。

那么,我如何继承基本政策,而只是添加这一项额外的 <expose-headers> 政策?

目前无法做到这一点。一旦定义了请求范围(产品、API 和操作匹配),策略的工作方式就是通过用来自上层的策略替换所有标签来构建策略。生成的有效策略只是一个接一个执行的语句的平面列表。从这个意义上说,您无法控制较低级别的 parent 政策。

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

每个有效策略有多个 CORS 策略很好,它们将一个接一个地执行,第一个能够处理 CORS 调用(源、方法、headers 匹配)的将采取行动。