CORS预检请求不适用于Azure API Management

时间:2015-11-15 12:28:52

标签: azure cors azure-api-management

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

我在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>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

CORS策略的预期用途是针对后端不支持CORS的情况。在这种情况下,您可以将此策略置于其中,它将回复OPTION请求而不将其转发到您的后端。您可以使用此策略来确定要为CORS处理哪些源/标头/方法。

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