Azure WebApp Cors不添加Cors标头

时间:2017-01-09 06:08:05

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

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

我想使用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 Cors AllowAll

这些都没有任何影响。 (即,响应不包含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.test-cors.org下面添加http://www.example.com(因此它应该允许通过),现在标题按预期返回Access-Control-Allow-Origin:http://www.test-cors.org

但这没有意义?当" http://www.test-cors.org"" This"是不是在允许的起源?它似乎没有做任何有用的事情?!

2 个答案:

答案 0 :(得分:4)

您可以通过添加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();
  }
}

如果您想通过门户网站进行控制,请查看以下图片:

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

  

请勿尝试在一个API中同时使用Web API CORS和App Service CORS   应用程序。应用服务CORS将优先使用Web API CORS   没有效果。例如,如果在App中启用一个原始域   服务,并在您的Web API代码中启用所有原始域   Azure API应用程序仅接受来自您指定的域的呼叫   天青。

enter image description here

答案 1 :(得分:1)

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

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