aws和CORS问题中部署webapi的angularjs

aws和CORS问题中部署webapi的angularjs,angularjs,amazon-web-services,asp.net-web-api,cors,Angularjs,Amazon Web Services,Asp.net Web Api,Cors,情境:我正在使用angular/.netwebapi构建一个电子商务站点。关键是——它需要为共享同一组webapi服务(幕后与mongoDB目录对话并管理mysql订单数据库)的多个客户部署。 我需要为每个客户设置一个seprate文件夹,因为静态和功能性规则集会随着时间的推移而变化 问题1:我如何在虚拟文件夹中部署angular应用程序,以便我的URL可以是,等等。在我尝试时,它会断开所有指向js和静态文件的路径 问题2:我通过在多个端口中创建站点并在不同的端口中托管每个存储来解决问题1。那就

情境:我正在使用angular/.netwebapi构建一个电子商务站点。关键是——它需要为共享同一组webapi服务(幕后与mongoDB目录对话并管理mysql订单数据库)的多个客户部署。 我需要为每个客户设置一个seprate文件夹,因为静态和功能性规则集会随着时间的推移而变化

问题1:我如何在虚拟文件夹中部署angular应用程序,以便我的URL可以是,等等。在我尝试时,它会断开所有指向js和静态文件的路径

问题2:我通过在多个端口中创建站点并在不同的端口中托管每个存储来解决问题1。那就行了。但我真的不希望我的.NETWebAPI应用程序成为一个中心应用程序。因此,当我试图从端口80(如)提供的页面访问正在运行的服务时,会遇到CORS问题

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

问题4:然而,我的真正意图是在linux机箱中部署angular应用程序,并在windows中部署主机服务。当我们决定把所有的东西都放在aws上时,我不确定我们怎么能在一个域中同时拥有linux和windows box,这样我就不会再次陷入CORS。任何指向这一点的指针都将不胜感激


提前感谢

减少此问题听起来启用CORS将是您的解决方案

如果您使用的是IIS/ASP.NET,则可以通过以下方式执行此操作:

  • 通过向站点或虚拟目录添加“Access Control Allow Origin”(访问控制允许源站)标头来创建IIS
  • 带有Response.AppendHeader的ASP.NET(“访问控制允许源代码”、“*”)
      全部

      看来事情终于解决了。 我的配置是--

    • nginx服务器(mydomain.com)中托管的Angular应用程序
    • Web服务托管在windows 2012 server(app.mydomain.com)中
    • **他们都在同一地区的aws

      我必须做很多事情才能使cors工作:

    • 通过添加以下行更改angular app.js中的app.config(感谢)

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

    • 这会处理GET请求。但是对于POST,angular会首先触发选项请求,以检查web服务器的接受情况(根据W3C)。因此web服务器必须相应地运行。因此,我使用了现有.Net MVC项目中的一个旧但非常有效的CORSHandler类。您可以在此处阅读详细信息- 各种帖子中都提到了这一点,但只有这一条(据我所知,它是如何工作的)

    • 有了1和2,事情本来应该会成功,但没有成功。所以现在是“未记录”事情的时候了。看来我们需要禁用webdav,让选项请求到达我们在#2中定义的corshandler。根据本文对web.config进行了更改-->

    • 最后大家一起工作


      我敢肯定,很多人特别是在#3上发毛,因为我发毛了。希望这能为所有这些可怜的人节省几个小时……hth

      对于webAPI,我已经在这么做了(第二个)。但理想的是我的HTML文件(运行angulrjs)将托管在linux/nginx集群中,webapi服务将直接从客户端访问,无需通过任何Web服务器。因此,浏览器将阻止CORS。我已使用这两个域创建了一个公共DNS并正在进行测试。一旦成功,将更新论坛。同时,如果其他人有其他指针,请让我确定现在,您可能想考虑在S3或CyrdFrand上托管这些文件。您也可以在那里指定CORS头。我不太熟悉NGiNX上的方法,但这可能有助于我使用CordShanle来实现这一点。