カスタムアクションフィルターを作成することにより、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);