如何使用现有的 webapi 服务和微风?请注意,我的 webapi 服务位于“server1/api”,而 Web 应用程序位于“server2”。我尝试更改数据服务中的服务名称,但得到一个 XMLHttpRequest 异常 101。这是一个跨域错误。是否可以将轻风与来自另一个域的 webapi 服务一起使用?
1 回答
跨域微风应用
是的,可以从一台服务器获取 Breeze 客户端应用程序,并让 Breeze 应用程序与托管在不同服务器上的数据服务进行通信。
当为 CORS 配置服务时, Breeze 客户端应用程序可以在支持 CORS 的浏览器上很好地跨域运行。
跨域问题和 CORS 解决方案属于更一般的 Web 安全问题类别。它们不是 Breeze 特定的。我们计划在 Breeze 网站的“Cool Breeze”部分发布一个关于 CORS + Breeze 的主题。
更新:2013 年 12 月 10 日
此示例使用原始 CORS 实现,如果您已升级到 Web API2,我们将不再推荐该实现。请阅读这篇出色的文章“ASP.NET Web API 2 中的 CORS 支持”,它解释了基本的 CORS 以及如何使用 Web API2 CORS 支持。
这个答案的其余部分保持原样。
使用 CORS 的 Todo 示例
在此之前,请查看Todo Sample的代码。该示例的服务器是为 CORS 设置的,已部署到 todo.breezejs.com,您可以通过查看Breeze Todo 示例主题页面底部的 jsFiddle 来查看它的运行情况。
四个兴趣点:
App_Start/ BreezeSimpleCorsHandler.cs完成工作
App_Start/ BreezeWebApiConfig.cs开启
// 在此服务器上启用 CORS GlobalConfiguration.Configuration.MessageHandlers.Add(new BreezeSimpleCorsHandler());
IIS7 需要的Web.config 行(IIS8 或 VS2012 的 IIS Express 不需要)
Scripts/app/ dataservice.js已准备好指向外部服务器;看到这一行:
// * 跨域服务示例 * //var serviceName = ' http://todo.breezejs.com/api/todos '; // 不同来源的控制器
希望这能让你暂时渡过难关。