Azure WebApp Cors 不添加 Cors 标头

Rod*_*ney 3 azure cors azure-web-app-service

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

我想使用 Azure 添加 CORS 支持,如本文所述。看起来很简单,您只需将一个 Origin 站点添加到列表中,如下所示:http : //screencast.com/t/r2ATq4u5

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

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

我尝试过的步骤:

  • 从我的解决方案中剥离了所有 CORS Nuget 库以及我的 API 项目中的所有 CORS 代码痕迹。
  • 部署到全新的 AppService
  • 启用 Owin Cors AllowAll

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

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

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

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

然后,我编辑CORS又在Azure中,并添加http://www.test-cors.org以下http://www.example.com(所以它应该让无论是通过),现在头返回Access-Control-Allow-Origin:http://www.test-cors.org预期。

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

Ion*_*t N 6

您可以通过在 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>
Run Code Online (Sandbox Code Playgroud)

在 global.asax 中:

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

如果您想从门户进行控制,请查看下图:

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

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

在此处输入图片说明

  • 嗨,Ionut,是的,我已经这样做了,但它不起作用(这就是我的问题所在 - 请参阅我原始问题中的屏幕截图链接)。它似乎表现得非常奇怪,而普通的不起作用。 (2认同)