4

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

有任何想法吗?

4

2 回答 2

1

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

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

于 2016-01-22T20:10:38.673 回答
0

在花了数周时间解决这个问题之后,我(在 Microsoft 支持人员的帮助下)发现了 Azure API 管理中的一个错误。如果您有多个 API,其中一个没有 URL 后缀(即使它不是失败的那个),请检查它的 CORS 策略。我们在 Azure API 管理中放入的第一个 API 除了 GET 之外没有任何方法,因此我们设置了一个 CORS 策略,只允许 GET 和 OPTION。但是,存在的错误似乎使所有入站飞行前请求都路由到没有 URL 后缀的 API。因此,我能够通过在不相关 API 的 CORS 策略中添加一个 PUT(和 POST 来衡量)来解决我的问题。

TL;DR:检查以确保没有 URL 后缀的 API 的 CORS 策略允许失败的方法。

希望这可以挽救某人的理智。

于 2022-03-02T21:15:27.087 回答