2016-10-03 146 views
0

我有一個網站「Website1」有資源列表(圖像/ css/js文件),我有多個客戶端網站,他們從我的網站「Website1」消費資源。CORS:具有多個域值的AccessControlAllowOrigin頭

我需要在響應內容中添加AccesscontrolAlloworigin標頭,以解決CORS問題(僅適用於ajax調用)僅適用於列入白名單的客戶端請求。

另外我的內容有一些緩存邏輯,每次處理請求時我都不能添加標題。我是否可以將所有列入白名單的域名添加爲訪問控制允許的原始標頭值,或者是否有任何解決方法可以做到這一點(我不想將*作爲值添加,我只需嚴格允許列入白名單的域名)。任何幫助讚賞。

回答

0

您可以啓用通過創建自定義的行爲過濾CORS或白名單域名:

public class EnbaleCorsFilter : ActionFilterAttribute 
{ 
    private const string OutgoingOriginHeader = "Access-Control-Allow-Origin"; 
    private const string OutgoingMethodsHeader = "Access-Control-Allow-Methods"; 
    private const string OutgoingAgeHeader = "Access-Control-Max-Age"; 
    private readonly string[] _origins; 
    private readonly string _methods; 

    public EnbaleCorsFilter(string[] origins = null, string methods = "*") 
    { 
     _origins = origins ?? new string[0]; 
     _methods = methods; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var host = filterContext.HttpContext.Request.Url.Host; 
     var response = filterContext.HttpContext.Response; 

     if (_origins.Contains(host, StringComparer.CurrentCultureIgnoreCase)) 
     { 
      response.AddHeader(OutgoingOriginHeader, host); 
      response.AddHeader(OutgoingMethodsHeader, _methods); 
      response.AddHeader(OutgoingAgeHeader, "3600"); 
     } 
    } 
} 

Application_Start()方法Global.asax文件添加EnbaleCorsFilter

GlobalFilters.Filters.Add(new EnbaleCorsFilter(new[] { "domain1", "domain2" })); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);