【发布时间】:2018-10-26 23:01:31
【问题描述】:
我如何在微风中使用现有的 webapi 服务?请注意,我的 webapi 服务位于“server1/api”,而 Web 应用程序位于“server2”。我尝试更改数据服务中的服务名称,但得到一个 XMLHttpRequest 异常 101。这是一个跨域错误。是否可以将微风与来自另一个域的 webapi 服务一起使用?
【问题讨论】:
标签: breeze
我如何在微风中使用现有的 webapi 服务?请注意,我的 webapi 服务位于“server1/api”,而 Web 应用程序位于“server2”。我尝试更改数据服务中的服务名称,但得到一个 XMLHttpRequest 异常 101。这是一个跨域错误。是否可以将微风与来自另一个域的 webapi 服务一起使用?
【问题讨论】:
标签: breeze
是的,可以从一台服务器获取 Breeze 客户端应用程序,并让 Breeze 应用程序与托管在不同服务器上的数据服务进行通信。
当为 CORS 配置服务时,Breeze 客户端应用程序可以在 CORS-supportive 浏览器上很好地跨域运行。
跨域问题和 CORS 解决方案属于更一般的网络安全问题类别。它们不是 Breeze 特定的。我们计划在 Breeze 网站的 "Cool Breezes" 部分发布有关 CORS + Breeze 的主题。
此示例使用原始 CORS 实现,如果您已升级到 Web API2,我们将不再推荐该实现。请阅读这篇出色的文章 "CORS Support in ASP.NET Web API 2",它解释了基本的 CORS 以及如何参与 Web API2 CORS 支持。
这个答案的其余部分保持原来的写法。
在此之前,请查看Todo Sample 的代码。该示例的服务器是为 CORS 设置的,已部署到 todo.breezejs.com,您可以通过查看 Breeze Todo Sample topic page 底部的 jsFiddle 来查看它的运行情况。
四个兴趣点:
App_Start/BreezeSimpleCorsHandler.cs 完成工作
App_Start/BreezeWebApiConfig.cs 将其打开
IIS7 需要的 Web.config 行(IIS8 或 VS2012 的 IIS Express 不需要)
Scripts/app/dataservice.js 已准备好指向外部服务器;看到这一行:
// * 跨域服务示例 * //var serviceName = 'http://todo.breezejs.com/api/todos'; // 不同来源的控制器
希望现在能让你渡过难关。
【讨论】:
Access-Control-Allow-Origin、Access-Control-Allow-Methods 等,以便在 WebAPI 中正确处理 CORS
XMLHttpRequest cannot load http://localhost:63017/api/breeze/Metadata. Origin http://localhost:60325 is not allowed by Access-Control-Allow-Origin. 我正在按照上述步骤操作,但仍然存在错误。 var mgr = new breeze.EntityManager('http://localhost:63017/api/breeze');