CORS 预检请求不适用于 Azure API 管理

Ada*_*abo 6 azure cors azure-api-management

我有 2 个 Azure 网站(ASP.NET MVC 5 和 ASP.NET WebApi 2)。MVC 网站有一些 jQuery 尝试将 CORS 请求发布到 WebApi。如果直接连接到 WebApi,它就可以正常工作。但是,当尝试通过 API 管理进行连接时,它不起作用。

我在 Chrome 中遇到的错误是:

XMLHttpRequest 无法加载https://XXXXXX.azure-api.net/api/search。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源“ https://YYYYYY.azurewebsites.net ”。

我排除了 WebApi 配置的问题,因为正如我所说,它可以直接工作。

以下是我的政策:

<policies>
    <inbound>
        <cors>
            <allowed-origins>
                <origin>*</origin>
                <!-- allow any -->
            </allowed-origins>
            <allowed-headers>
                <header>accept</header>
                <header>accept-encoding</header>
                <header>access-control-request-headers</header>
                <header>access-control-request-method</header>
                <header>connection</header>
                <header>content-type</header>
                <header>host</header>
                <header>origin</header>
                <header>referer</header>
                <header>user-agent</header>
            </allowed-headers>
            <expose-headers>
                <header>access-control-allow-headers</header>
                <header>access-control-allow-origin</header>
                <header>cache-control</header>
                <header>content-length</header>
                <header>date</header>
                <header>expires</header>
                <header>pragma</header>
                <header>server</header>
                <header>set-cookie</header>
                <header>x-aspnet-version</header>
                <header>x-powered-by</header>
            </expose-headers>
        </cors>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
</policies>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Vit*_*tin 2

CORS 策略的预期用途是当您的后端不支持 CORS 的情况。在这种情况下,您可以放入此策略,它将回复 OPTION 请求,而不将它们转发到您的后端。您可以使用此策略来决定要处理 CORS 的来源/标头/方法。

或者,如果您的后端已经支持 CORS,并且您认为在 APIM 级别处理 CORS 流没有任何好处,您可以只代理整个流。为此,您应该删除 CORS 策略,并使用 OPTIONS 方法在 APIM 中的 API 中创建一个新操作,以便 OPTIONS 请求正常转发到后端。