Подтвердить что ты не робот

CORS в ASP.NET MVC5

У меня есть проект MVC, в котором у меня есть несколько методов контроллера JSON, которые я хочу открыть для перекрестного домена. Не весь сайт, только эти два метода.

В основном я хочу, чтобы точная вещь, указанная в этом посте для cors:

http://enable-cors.org/server_aspnet.html

Однако проблема заключается в том, что у меня есть обычный MVC-проект, а не WEB API, а это значит, что я не могу выполнить шаги, регистрирующие регистр

public static void Register(HttpConfiguration config)
{
    // New code
    config.EnableCors();
}

поскольку он отсутствует в моем проекте MVC.

Есть ли способ использовать эту библиотеку, хотя это проект MVC?

Я знаю, что могу настроить это через web.config, используя:

<httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="http://www.domain.com" />
      </customHeaders>
</httpProtocol>

Но я не хочу раскрывать все методы, и я хочу указать более одного домена (2 домена) для доступа к моим методам...

4b9b3361

Ответ 1

Как описано здесь: Настройка Access-Control-Allow-Origin в ASP.Net MVC - простейший возможный метод

Вы должны просто создать фильтр действий и установить там заголовки. Вы можете использовать этот фильтр действий для своих действий, где бы вы ни захотели.

public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        base.OnActionExecuting(filterContext);
    }
}

Если вы хотите добавить несколько доменов, вы не можете просто задать заголовок несколько раз. В своем фильтре действий вам нужно будет проверить, является ли запрашивающий домен из вашего списка доменов, а затем установить заголовок.

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var domains = new List<string> {"domain2.com", "domain1.com"};

        if (domains.Contains(filterContext.RequestContext.HttpContext.Request.UrlReferrer.Host))
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        }

        base.OnActionExecuting(filterContext);
    }