2016-10-03 8 views
0

リソースのリスト(images/css/jsファイル)を持つ "Website1"というWebサイトがあり、Webサイト "Website1"からリソースを消費する複数のクライアントWebサイトがあります。CORS:複数のドメイン値を持つAccessControlAllowOriginヘッダー

CORSの問題(ajax呼び出し用)をホワイトリストに登録されたクライアントの要求にのみ解決するには、応答コンテンツにAccesscontrolAlloworiginヘッダーを追加する必要があります。

また、私のコンテンツにはキャッシュロジックがあります。要求が処理されるたびにヘッダーを追加することはできません。アクセス制御が元のヘッダー値を許可するようにホワイトリストに登録されたドメイン名をすべて追加することもできますし、それを行うための回避策もあります(値として*を追加したくない、ホワイトリストドメイン名のみを厳密に許可する必要があります)。どんな助けもありがたい。

答えて

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); 
関連する問題