2015-06-26 93 views
2

我有一個ASP.NET MVC應用程序運行在www.domain.com(總是www)。我的靜態域名在static.domain.com上運行。允許CORS靜態內容在MVC

現在我設置訪問控制允許來源「*」在web.config中:

<add name="Access-Control-Allow-Origin" value="*"/> 

然而,顯然這不是好的做法。所以我嘗試添加以下內容:

<add name="Access-Control-Allow-Origin" value="//static.domain.com"/> 

允許任何協議(這是我最好要,或者我是否可以添加兩個規則,一個用於HTTP,另一個用於HTTPS)。這不起作用,所以我也嘗試使用http://協議。

<add name="Access-Control-Allow-Origin" value="http://static.domain.com"/> 

哪個也沒有工作。

我已經通過類似的線程/問題在這裏讀計算器,但一切我發現表明添加的域名,因爲我在最後一個例子「http://static.domain.com」沒有...

我必須做一些錯誤的,但我似乎無法得到那是什麼。希望你能幫我!

提前致謝!

Mike

回答

0

對此的回答與其他帖子的回答相似。它只是無法通過web.config。它需要在Global.asax.cs文件中以編程方式設置。

這是通過在Global.asax.cs文件的Application_EndRequest()方法中添加一些代碼行來完成的。我將代碼提取到了一個方法中,但是如果您願意的話,您可以直接將代碼放入其中。

string[] domains = {"static.domain.com", "domain.com"}; // Personally I get this from a config 

if (Request != null || Request.Headers != null || Response != null || Response.Headers != null) 
{  
    string host = Request.Headers["Host"]; // This doesn't care about protocol 

    if (domains.Where(domain => domain == host).Count() > 0) 
    Response.Headers.Add("Access-Control-Allow-Origin", "*"); 
    else 
    Response.Headers.Remove("Access-Control-Allow-Origin"); 
} 

這個偉大的工程,因爲Request.Headers["Host"]沒有得到該協議,我們就可以檢查是否有任何的比賽我們的字符串數組中,我們設置了訪問控制允許來源,使一切,否則我們刪除它。所以在某種程度上,我們正在動態設置關鍵。

這需要在Global.asax.cs中,因爲它需要在每個請求上(因爲我們也需要將它用於所有資源文件)。