首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CORS:具有多个域值的AccessControlAllowOrigin标头

CORS:具有多个域值的AccessControlAllowOrigin标头
EN

Stack Overflow用户
提问于 2016-10-04 03:53:24
回答 1查看 178关注 0票数 0

我有一个网站"Website1“有资源(图像/css/js文件)的列表,我有多个客户网站,谁使用我的网站"Website1”的资源。

我需要在响应内容中添加AccesscontrolAlloworigin头部,以解决仅针对白名单客户端请求的CORS问题(对于ajax调用)。

另外,我的内容有一些缓存逻辑,我不能在每次处理请求时都添加头部。是否可以添加所有白名单域名作为访问控制allow源头的值,或者有什么替代方法(我不想添加*作为值,我需要严格地只允许白名单域名)。感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-10-04 05:09:09

您可以通过创建自定义操作过滤器来开启CORS或白名单域名:

代码语言:javascript
复制
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

代码语言:javascript
复制
GlobalFilters.Filters.Add(new EnbaleCorsFilter(new[] { "domain1", "domain2" }));
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39839371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档