我有一个 Owin WebAPI2 .NET 应用程序,托管在 Azure 中的 AppService 上。
我想使用 Azure 添加 CORS 支持在本文中。这看起来很简单,您只需将 Origin 站点添加到列表中,如下所示:http://screencast.com/t/r2ATq4u5
我现在希望响应标头包含此允许的来源。
但是,当我使用 Fiddler 检查时,CORS 标头不包含在响应标头中:http://corstestqm.azurewebsites.net/breeze/restaurantsbreeze/basictest
我尝试过的步骤:
- 从我的解决方案中删除了所有 CORS Nuget 库以及我的 API 项目中的所有 CORS 代码痕迹。
- 部署到全新的AppService
-
启用欧文科尔斯允许全部
这些都没有任何效果。 (即响应不包含 Azure 中指定的 CORS 标头)。
我在这里错过了一些非常基本的东西吗?
UPDATE我把问题进一步简化:
在VS2015中,我创建了一个新的API项目并将其推送到http://corstestbasicap2.azurewebsites.net/api/values/没有任何变化(即它不应该启用 CORS)。
然后我用测试Cors工具来访问该 API。它没有按预期收到 CORS 错误。然后我进入 Azure 并添加一个虚拟 URL(例如http://www.example.com)并再次尝试 CORS 测试。它应该会失败,因为 Azure 应该只让 example.com 通过。然而,它工作得很好。
I then 在 Azure 中再次编辑 CORS并添加http://www.test-cors.org below http://www.example.com(所以它应该让其中一个通过)现在标头返回Access-Control-Allow-Origin:http://www.test-cors.org
正如预期的那样。
但这没有意义吗?当然,当“http://www.test-cors.org“不在允许的起源中?它似乎没有做任何有用的事情?!
您可以通过在 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>
在全局.asax中:
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.Flush();
}
}
如果您想从门户进行控制,请查看下图:
注意,根据App Service CORS文档您不能在一个 API 应用程序中同时使用 Web API CORS 和应用服务 CORS。您必须清理有关 Web API CORS 的项目
不要尝试在一个 API 中同时使用 Web API CORS 和应用服务 CORS
应用程序。应用服务 CORS 将优先,Web API CORS 将具有
没有效果。例如,如果您在App中启用一个源域
服务,并启用 Web API 代码中的所有源域,您的
Azure API 应用程序将仅接受来自您在中指定的域的调用
天蓝色。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)