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

时间:2018-04-21 10:12:00

标签: asp.net azure cors azure-web-roles

我有一个运行API服务的Azure webrole。我尝试启用CORS,以便浏览器脚本可以使用API​​。有很多问题涉及在web-api应用程序上启用CORS,但我还没有找到能够为 webroles 提供答案的问题。

我已尝试将this answer中的神奇自定义标题块添加到我的web.config中,但这并不起作用。

来自Microsoft的

This document暗示可能会使用 Microsoft.AspNet.Cors nuget包,但我不清楚如何获取 HttpConfiguration < / strong>来自webrole OnStart 方法。我必须装饰每一个API方法,这似乎很奇怪。是不是没有一个单一的开关&#39;我可以轻弹以启用整个服务的CORS吗?

相关问题......

  • 验证CORS实际启用的最简单方法是什么?目前我正在使用Blazor PostJsonAsync调用并依赖它来通过,但它反复重新配置并将角色上传到Azure以尝试更改。

  • 更大的问题......我是否正在使用webrole与潮流作斗争?许多文档都涉及web-api和web-apps。也许这些是未来,webroles已被弃用?

1 个答案:

答案 0 :(得分:1)

我还建议转到webapps。但是,如果使用OWIN,您也可以使用它来处理Web角色以及如何应用cors也适用于webapp。

您可以在网络角色中托管您的API,如下所示:

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

这为您提供了所需的HttpConfigurationStartup.cs)。

  

我必须装饰每一个API方法,这似乎很奇怪。是不是没有一个单一的开关&#39;我可以轻弹以启用整个服务的CORS吗?

您可以使用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);
    }