我如何(简单地)在我的 Azure webrole 上启用 CORS API

How can I (simply) enable CORS on my Azure webrole API

我有一个 Azure webrole,它是 运行 一项 API 服务。我正在尝试启用 CORS,以便浏览器脚本可以使用 API。有很多问题涉及在 web-api 应用程序上启用 CORS,但我还没有找到可以为 webroles.

提供答案的问题

我试过将魔法 customheaders 块从 this answer 添加到我的 web.config,但这不起作用。

Microsoft 的

This document 暗示可以使用 Microsoft.AspNet.Cors nuget 包,但我不清楚如何获得 HttpConfiguration 来自 webrole OnStart 方法。我必须装饰我的每一个 API 方法,这似乎也很奇怪。没有一个 'switch' 我可以轻弹一下为整个服务启用 CORS 吗?

相关问题...

我还建议转向网络应用程序。但是,如果您使用 OWIN,您也可以让它与 Web 角色一起使用,并且在那里应用 cors 的方式也适用于 Web 应用程序。

您可以像这样在网络角色中托管您的 API:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/hosting-aspnet-web-api/host-aspnet-web-api-in-an-azure-worker-role

这为您提供了您需要的 HttpConfiguration (Startup.cs)。

It also seems odd that I have to decorate every one of my API methods. Is there not a single 'switch' I can flick to enable CORS for the entire service?

您可以使用 ICorsPolicyProvider 在任何地方启用它:

// in startup.cs
config.EnableCors(new AllowAllCorsPolicyProvider());

public class AllowAllCorsPolicyProvider : ICorsPolicyProvider
{
    readonly CorsPolicy _CorsPolicy;

    public AllowAllCorsPolicyProvider()
    {
        _CorsPolicy = new CorsPolicy {AllowAnyHeader = true, AllowAnyMethod = true, AllowAnyOrigin = true};
    }

    public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        return Task.FromResult(_CorsPolicy);
    }