使用 CORS 的应用程序在 Azure 中不起作用

Posted

技术标签:

【中文标题】使用 CORS 的应用程序在 Azure 中不起作用【英文标题】:Application using CORS does not work in Azure 【发布时间】:2016-05-27 17:47:04 【问题描述】:

我已将我的应用程序配置为使用 CORS。在我的本地环境中一切正常,但是在将应用程序部署到 Azure 后,我们收到以下错误:

请求中没有“Access-Control-Allow-Origin”标头 资源。

当我在我的计算机上运行应用程序并使用 DHC chrome 扩展程序创建原始标头时,它确实有效:

Access-Control-Allow-Credentials:   true
Access-Control-Allow-Origin:        http://mysite.s3-website-eu-west-1.amazonaws.com
Access-Control-Expose-Headers:      Location,Finished

这是我使用的代码/配置:

Global.asax.cs

protected void Application_Start()

    GlobalConfiguration.Configure(WebApiConfig.Register);

WebApiConfig.cs

public static void Register(HttpConfiguration config)

    config.EnableCors(new MyCorsPolicyAttribute());
    config.MapHttpAttributeRoutes();

MyCorsPolicyAttribute.cs

public class MyCorsPolicyAttribute : Attribute, ICorsPolicyProvider

    private CorsPolicy _policy;

    public MyCorsPolicyAttribute()
    
        _policy = new CorsPolicy
                        
            AllowAnyMethod = true,
            AllowAnyHeader = true,
            SupportsCredentials = true
        ;

        _policy.ExposedHeaders.Add("Location");
        _policy.ExposedHeaders.Add("Finished");

        // Add allowed origins.
        _policy.Origins.Add("http://mysite.s3-website-eu-west-1.amazonaws.com");
        _policy.Origins.Add("http://localhost:81");//for testing purposes; 
   
    public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request)
    
        return Task.FromResult(_policy);
    

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

最后是 web.config

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="WebDav" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

为什么上述方法在 Azure 环境中不起作用?

【问题讨论】:

【参考方案1】:

我必须在 Azure 门户上为我的应用服务启用 CORS

【讨论】:

【参考方案2】:

从最近开始,Azure API 应用程序(现在已过时并被统一到应用程序服务中)不遵守您的代码定义的 CORS 标头。部署到新的应用服务实例。

【讨论】:

将它部署到一个新的应用服务并且它工作了!谢谢!

以上是关于使用 CORS 的应用程序在 Azure 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥预构建 cors 策略配置在 Laravel 7 应用程序中不起作用?

CORS 在独立的 tomcat 中不起作用

CORS 过滤器在我的 Java 应用程序中不起作用

CORS 中间件在 nodeJS 中不起作用

Quartz.Net 调度程序在 Azure 中不起作用

使用 NancyFX 获取在 CORS 中不起作用的请求