【问题标题】:How can I modify Azure API base policy without completely overwriting it?如何在不完全覆盖的情况下修改 Azure API 基本策略?
【发布时间】:2017-04-21 20:44:07
【问题描述】:

在 Azure API 管理中,我正在尝试修改 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>

在具体路由中,我想修改&lt;cors&gt; 部分以包含更多策略,如下所示:

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

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

那么,我将如何继承基本策略但只添加一个额外的&lt;expose-headers&gt; 策略?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 您确定,对于多个 CORS 策略,“它们将一个接一个地执行,并且第一个能够处理 CORS 调用(来源、方法、标头匹配)的策略将采取行动。” ?经过测试,看起来它只是找到的第一个使用的 CORS 策略。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多