我有一个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
我尝试过的步骤:
这些都没有任何影响。 (即,响应不包含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"是不是在允许的起源?它似乎没有做任何有用的事情?!
答案 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应用程序仅接受来自您指定的域的呼叫 天青。
答案 1 :(得分:1)
我的问题是我不小心将http而不是https放入Azure AD B2C自定义页面配置刀片......更改为https后,它就像魅力一样。
CORS headers missing when deployed on Azure Web App / Azure API