【问题标题】:Azure WebApp Cors does not add Cors headersAzure WebApp Cors 不添加 Cors 标头
【发布时间】:2017-05-23 08:29:45
【问题描述】:

我在 Azure 的 AppService 上托管了一个 Owin WebAPI2 .NET 应用程序。

我想添加使用 Azure 作为 in this article 的 CORS 支持。看起来很简单,你只需像这样在列表中添加一个 Origin 站点:http://screencast.com/t/r2ATq4u5

我现在希望 Response 标头包含这个允许的 Origin。

但是,当我使用 Fiddler 检查时,响应标头中不包含 CORS 标头: http://corstestqm.azurewebsites.net/breeze/restaurantsbreeze/basictest

我尝试过的步骤:

  • 从我的解决方案中删除所有 CORS Nuget 库以及我的 API 项目中的所有 CORS 代码痕迹。
  • 部署到全新的 AppService
  • Enabled Owin CorsAllowAll

这些都没有任何效果。 (即响应不包含 Azure 中指定的 CORS 标头)。

我在这里错过了一些非常基本的东西吗?

更新 我进一步简化了问题: 在VS2015中新建了一个API项目,推送到http://corstestbasicap2.azurewebsites.net/api/values/ 没有任何变化(即它不应该启用 CORS)。

然后我使用 Test-Cors tool 来访问该 API。它没有按预期出现 CORS 错误。然后我进入 Azure 并添加一个虚拟 URL(例如 http://www.example.com)并再次尝试 CORS 测试。它应该会失败,因为 Azure 应该只让 example.com 通过。但是,它工作正常。

然后我 edit CORS again in Azure 并在 http://www.example.com 下方添加 http://www.test-cors.org(因此它应该允许通过),现在标题按预期返回 Access-Control-Allow-Origin:http://www.test-cors.org

但这没有意义吗?当“http://www.test-cors.org”不在允许的来源中时,之前的调用肯定会失败吗?它似乎没有做任何有用的事情?!

【问题讨论】:

    标签: azure cors azure-web-app-service


    【解决方案1】:

    我的问题是我不小心将 http 而不是 https 放入 Azure AD B2C 自定义页面配置刀片...更改为 https 后它就像一个魅力。

    CORS headers missing when deployed on Azure Web App / Azure API

    【讨论】:

      【解决方案2】:

      您可以通过添加 web.config 波纹管配置来实现这些:

      <system.webServer>
           <httpProtocol>
            <customHeaders>
              <add name="Access-Control-Allow-Origin" value="*"/>
              <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept,Authorization"/>
              <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/>
            </customHeaders>
          </httpProtocol>
      </system.webServer>
      

      在 global.asax 中:

      protected void Application_BeginRequest()
      {
        if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
        {
          Response.Flush();
        }
      }
      

      如果你想从门户控制,请查看下面的图片:

      注意,根据应用服务 CORS documentation,您不能在一个 API 应用中同时使用 Web API CORS 和应用服务 CORS。您必须清理有关 Web API CORS 的项目

      不要尝试在一个 API 中同时使用 Web API CORS 和应用服务 CORS 应用程序。应用服务 CORS 优先,Web API CORS 优先 没有效果。例如,如果您在 App 中启用了一个源域 服务,并在您的 Web API 代码中启用所有源域,您的 Azure API 应用程序将只接受来自您在其中指定的域的调用 天蓝色。

      【讨论】:

      • 嗨 Ionut,谢谢,我发现 web.config 方式有效,但是我想使用 Azure 应用服务控制 CORS,因为每个应用服务插槽都有不同的要求(我知道我可以做到这与调试 webconfigs)。我的问题确实是为什么 Azure CORS 功能不能按预期工作?
      • 嗨 Rodney,您可以从门户控制每个插槽的 Cors 标头:选择 yuur 应用程序、插槽,然后从刀片菜单中选择 CORS。你试过这个吗?我在回复中添加了一张图片
      • 嗨 Ionut,是的,我已经这样做了,但它不起作用(这是我的问题所在 - 请参阅我原始问题中的屏幕截图链接)。它似乎表现得非常怪异,plain 不起作用。
      • 嗨罗德尼,我根据您的需要更新了我的帖子。问候
      • 您好 Ionut,我感谢您的努力,但这是我在上面的问题中尝试的第一步(剥离所有 CORS 库并且仅使用 Azure)。这是行不通的。未发出 Azure 应用服务 cors 标头
      猜你喜欢
      • 2018-02-13
      • 2016-02-15
      • 2017-05-31
      • 2019-12-20
      • 2016-01-25
      • 2015-08-10
      • 2014-01-14
      • 2017-04-16
      • 2017-02-22
      相关资源
      最近更新 更多