我有一个网站"Website1“有资源(图像/css/js文件)的列表,我有多个客户网站,谁使用我的网站"Website1”的资源。
我需要在响应内容中添加AccesscontrolAlloworigin头部,以解决仅针对白名单客户端请求的CORS问题(对于ajax调用)。
另外,我的内容有一些缓存逻辑,我不能在每次处理请求时都添加头部。是否可以添加所有白名单域名作为访问控制allow源头的值,或者有什么替代方法(我不想添加*作为值,我需要严格地只允许白名单域名)。感谢您的帮助。
发布于 2016-10-04 05:09:09
您可以通过创建自定义操作过滤器来开启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);https://stackoverflow.com/questions/39839371
复制相似问题