2013-09-27 55 views
1

情況:我正在使用angular/.netwebapi構建電子商務網站。關鍵是 - 它需要爲共享同一組webapi服務的多個客戶部署(後臺與mongoDB目錄對話並管理mysql訂單數據庫)。 由於靜態和功​​能規則集的變化,我需要爲每個客戶分別設置文件夾。angularjs wth在aws和CORS問題中的webapi部署

問題1:如何部署虛擬文件夾的角度應用程序,以便我的網址可以http://mydomain.com/cust1http://mydomain.com/cust2等。我想它打破了所有的路徑JS和靜態文件

問題2:我通過在多個端口中創建站點來解決#1問題,並將每個商店託管在不同的端口中。這將工作。但我真的不希望我的.Net Web Api應用程序成爲中央應用程序。因此,當我嘗試從<> 80(例如http://mydomain.com:8081/index.html#/mypage)服務的頁面訪問運行於http://mydomain.com/api/service的服務時,我遇到了CORS問題。

問題3:我相信#1和2可以解決,如果我使用子域的方法。因此,每個商店都託管到不同的子域(如cust1.mydomain.com,cust2.mydomain.com,每個指向不同的文件夾),webapi託管在一個虛擬目錄(例如mydomain.com/api)中。我會盡快在IIS中嘗試一下。

問題4:然而我真正的意圖是在linux中部署角度應用程序,並在Windows中部署主機服務。當我們決定把所有的東西都放在一起時,我不知道我們怎麼能在一個域中同時擁有linux和windows框,這樣我就不會再陷入CORS了。任何指針,將非常感激。

在此先感謝

回答

0

所有

最後看起來像事情都解決了。 我的配置是 -

  1. 在nginx的服務器託管角應用程序(mydomain.com)
  2. Web服務在Windows 2012託管服務器(app.mydomain.com)

**他們都在同一地區。

我不得不做多件事情,使CORS工作:通過添加以下行(感謝http://better-inter.net/enabling-cors-in-angular-js/

  1. 變化的app.config的角度app.js。

    的app.config([ '$ httpProvider',函數($ httpProvider){$ httpProvider.defaults.useXDomain = TRUE; 刪除$ httpProvider.defaults.headers.common [ 'X-請求-隨着']; }

  2. 這花了GET請求的服務。然而,對於POST,角火災選項要求首先要檢查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/

最後,所有一起工作......

我敢肯定很多人拉到尤其是在#3他們的頭髮,因爲我做到了。希望這將節省幾個小時的所有這樣的可憐的靈魂...... hd

0

減少這個問題倒聽起來啓用CORS將是您的解決方案。

如果您正在使用IIS/ASP.NET你可以做到這一點無論是在:通過添加

  • IIS中的「訪問控制允許來源」頭到站點或虛擬目錄
  • ASP.NET with Response.AppendHeader(「Access-Control-Allow-Origin」,「*」);
+0

對於webAPI我已經這樣做(第二個)。但理想情況下,我的HTML文件(運行angulrjs)將被託管到linux/nginx集羣中,並且webapi服務將直接從客戶端訪問,而無需通過任何Web服務器。 所以瀏覽器會阻止CORS。 我已經創建了一個具有兩個域的公共DNS並正在進行測試。一旦成功將更新論壇。 與此同時,如果別人有其他指針,請讓我知道。 – rahul

+0

您可能想考慮在S3或Cloudfront上託管這些文件。您也可以在那裏指定CORS標題。我不熟悉在nginx上做到這一點的方式,但這可能有助於http://enable-cors.org/server_nginx.html – 2013-09-30 01:06:48

+0

我使用corshandler做了那種 - 但關鍵是webdav - 我不知道爲什麼我不得不禁用 – rahul