我们正在开发一个web-api后端...实现了一些调用,在c#中使用sqlserver等完成。 后端将有多个客户端应用程序。一个是网站,一个是使用phonegap的移动应用程序,希望我们能够使用该服务获得更多客户端应用...
我们希望独立于网站内容设置web-api项目,而不是遇到跨域问题。
可以使用反向代理吗?或者也许是天蓝色的vpn?还有其他建议吗?
保
答案 0 :(得分:1)
您需要做几件事:
设置WebApi以支持CORS(跨源资源共享)。您可以通过安装Microsoft的Cors Nuget软件包轻松完成此任务:
Install-Package Microsoft.AspNet.WebApi.Cors
然后你需要在应用程序生命周期的早期启用cors,例如在global.asax的Application_Start部分:
GlobalConfiguration.Configuration.EnableCors();
有关详细信息,请参阅此链接:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
我看到你担心安全问题。好。那么你可能还需要做两件事来让你的CORS很好地发挥。
首先,您应该考虑创建自定义Cors策略提供程序(请参阅上面的链接)。由于您在Azure中托管WebApi,因此可以轻松配置允许的源。这应该只是您希望在webapi上允许的网站的白名单。
其次,我假设您的用户已在网站上进行身份验证。我还假设您调用WebApi的方式是通过jQuery或其他使用jQuery作为传输的提供程序(例如BreezeJS)。要将身份验证详细信息传递给WebApi,jQuery需要知道它应该这样做。最简单的方法是在您的网站上设置全局设置:
$.ajaxSetup({ crossDomain: true, xhrFields: { withCredentials: true } });
确切地知道出了什么问题(因为从经验来看会有什么意义)的一个好建议是使用Chrome进行测试。然后你可以打开这个链接,查看线路上发生的所有细节:chrome:// net-internals /#events
快乐的编码! :)
答案 1 :(得分:0)
创建云服务(Web角色 - MVC 4 Web应用程序),然后将您的webapi部署到那里。只需确保您的webapi处理CORS问题,这样您就可以从两个客户端调用api。
PS:我正在开展一个与你说完全相同的项目。一个网站和移动应用程序作为我的webapi在azure上的客户,我们这样做。它工作得很好。