Как разрешить несколько исходных доменов с помощью Access-Control-Allow-Origin в файле Global.asax.cs? - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь остановить обработку запроса опции из Global.asax.cs. Есть ли возможность разрешить нескольким междоменным доменам использование Access-Control-Allow-Origin в файле Global.asax?

Iхочу разрешить определенные несколько доменов (http://testsite.com, https://testsite.com) одновременно.

Есть ли какой-либо правильный способ сделать это. Я хочу сделать это на Global.asax, и вот мойтекущий код

        protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var context = HttpContext.Current;
        var response = context.Response;

        // enable CORS
        response.AddHeader("Access-Control-Allow-Origin", "http://testsite.com, https://testsite.com");
        response.AddHeader("X-Frame-Options", "ALLOW-FROM *");

        if (context.Request.HttpMethod == "OPTIONS")
        {
            response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
            response.AddHeader("Access-Control-Allow-Headers", "authorization, content-type");
            response.AddHeader("Access-Control-Allow-Credentials", "true");
            response.AddHeader("Access-Control-Max-Age", "1728000");
            response.End();
        }

    }

1 Ответ

0 голосов
/ 11 мая 2018

Наконец я нашел ответ. Вы не можете дублировать заголовки «Access-Control-Allow-Origin» или не можете указывать разделенные запятыми домены как значение «Access-Control-Allow-Origin».

Поэтому вы должны разрешить один запрашиваемый домен на один раз.

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        //to get requested domain from request header
        var requestedDomain = Request.ServerVariables["HTTP_ORIGIN"];
        var isEnabledDomain = false;
        if (requestedDomain != null)
        {
            var enabledDomains = "http://testsite.com, https://testsite.com";
            foreach (var enabledDomain in enabledDomains.Split(','))
            {
                if (enabledDomain.Equals(requestedDomain))
                {
                    isEnabledDomain = true;
                    break;
                }
            }

            if (isEnabledDomain)
            {
                HttpContext context = HttpContext.Current;
                HttpResponse response = context.Response;

                response.AddHeader("Access-Control-Allow-Origin", requestedDomain);
                response.AddHeader("X-Frame-Options", "ALLOW-FROM *");
                if (context.Request.HttpMethod == "OPTIONS")
                {
                    response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
                    response.AddHeader("Access-Control-Allow-Headers", "authorization, content-type");
                    response.AddHeader("Access-Control-Allow-Credentials", "true");
                    response.AddHeader("Access-Control-Max-Age", "1728000");
                    response.End();
                }
            }
        }
    }
...