angularjs ws中的webapi部署和CORS问题

时间:2013-09-27 19:59:25

标签: angularjs amazon-web-services asp.net-web-api cors

情况:我正在使用angular / .netwebapi构建电子商务网站。关键是 - 它需要部署为共享同一组webapi服务的多个客户(在场景后面与mongoDB目录进行对话并管理mysql订单数据库)。 而且我需要为每个客户设置单独的文件夹,因为静态和功能规则集会发生变化。

问题1:如何在虚拟文件夹中部署角度应用,以便我的网址可以是http://mydomain.com/cust1http://mydomain.com/cust2等。正如我尝试的那样,它打破了js的所有路径和静态文件

问题2:我通过在多个端口创建网站并在不同端口托管每个商店来解决#1问题。那会有用。但我真的不希望我的.Net Web Api应用程序成为中心应用程序。因此,当我尝试从端口<>提供的页面访问http://mydomain.com/api/service中运行的服务时,我遇到了CORS问题80(如http://mydomain.com:8081/index.html#/mypage)。

问题3:如果我使用子域方法,我相信#1和2可以解决。因此,每个商店都托管到不同的子域(如cust1.mydomain.com,cust2.mydomain.com,每个子站点指向不同的文件夹),webapi托管在一个虚拟目录(例如mydomain.com/api)中。我很快就会在IIS中尝试一下。

问题4:但是我的真正意图是在Linux框中部署角度应用程序并在Windows中部署主机服务。当我们决定放置所有内容时,我不确定如何在一个域中同时拥有linux和windows box,这样我就不会再次陷入CORS。任何指向它的指针都会非常感激。

提前致谢

2 个答案:

答案 0 :(得分:0)

减少这个问题听起来像启用CORS将是您的解决方案。

如果您使用的是IIS / ASP.NET,则可以在以下位置执行此操作:

  • IIS通过向站点或虚拟目录添加“Access-Control-Allow-Origin”标头
  • ASP.NET with Response.AppendHeader(“Access-Control-Allow-Origin”,“*”);

答案 1 :(得分:0)

所有

最后看起来事情已经解决了。 我的配置是 -

  1. 在nginx服务器(mydomain.com)中托管的角色应用
  2. Web服务托管在Windows 2012服务器(app.mydomain.com)
  3. **他们都在同一地区的aws。

    我必须做很多事情才能让角色工作:

    1. 通过添加以下行来更改角度app.js中的app.config(感谢http://better-inter.net/enabling-cors-in-angular-js/)。

      app.config(['$ httpProvider',function($ httpProvider){     $ httpProvider.defaults.useXDomain = true;     删除$ httpProvider.defaults.headers.common ['X-Requested-With']; }

    2. 这处理了GET请求。但是对于POST,角度激活OPTION请求首先检查Web服务器接受(按W3C)。所以Web服务器必须相应地播放。所以我在现有的.Net MVC项目中使用了一个旧的但非常有效的CORSHandler类。你可以在这里阅读详细信息 - http://dlr2008.wordpress.com/2013/06/17/rest-web-api-and-cors/ 在各种帖子中都有很多提及 - 但这只是(据我的知识解释它是如何工作的)

    3. 1和2,事情应该有效 - 但没有。所以现在是“无证件”事情的时候了。好像我们需要禁用webdav让OPTION请求到达我们在#2中定义的corshandler。根据这篇文章对web.config进行了更改 - > http://brockallen.com/2012/10/18/cors-iis-and-webdav/

    4. 最后所有人一起工作......

      我很确定很多人特别在#3上拔毛,因为我做了。希望这可以节省所有这些可怜的灵魂几个小时... ...