我有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>
有什么想法吗?
答案 0 :(得分:0)
CORS策略的预期用途是针对后端不支持CORS的情况。在这种情况下,您可以将此策略置于其中,它将回复OPTION请求而不将其转发到您的后端。您可以使用此策略来确定要为CORS处理哪些源/标头/方法。
或者,如果您的后端已经支持CORS,并且您认为在APIM级别处理CORS流没有任何好处,您可以代理整个流程。要实现这一点,您应该删除CORS策略并使用OPTIONS方法在APIM中的API中创建一个新操作,以便OPTIONS请求将被正常转发到后端。