1

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

问题 1:如何在虚拟文件夹中部署 Angular 应用程序,以便我的网址可以是http://mydomain.com/cust1http://mydomain.com/cust2等。当我尝试时,它会破坏所有 js 和静态路径文件

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

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

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

提前致谢

4

2 回答 2

0

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

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

  • IIS 通过向站点或虚拟目录添加“Access-Control-Allow-Origin”标头
  • 带有Response.AppendHeader("Access-Control-Allow-Origin", "*") 的ASP.NET ;
于 2013-09-29T06:26:41.420 回答
0

全部

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

  1. 托管在 nginx 服务器 (mydomain.com) 中的 Angular 应用程序
  2. Web 服务托管在 Windows 2012 服务器 (app.mydomain.com) 中

** 他们都在同一地区的aws中。

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

  1. 通过添加以下行来更改 angular 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,angular 会首先触发 OPTION 请求以检查 Web 服务器的接受度(根据 W3C)。所以网络服务器必须相应地发挥作用。因此,我从现有的 .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/

终于大家齐心协力了...

我很确定很多人都拉了他们的头发,尤其是在#3,因为我做到了。希望这将节省所有这些可怜的灵魂的几个小时...... hth

于 2013-10-06T19:48:12.067 回答