CORS в ASP .NET MVC5
У меня есть проект MVC, в котором у меня есть несколько методов контроллера JSON, которые я хочу выставить кросс-домен. Не весь сайт, только эти два метода.
Я в основном хочу к точной вещи, изложенной в этом посте для Cors:
http://enable-cors.org/server_aspnet.html
Однако проблема в том, что у меня есть обычный MVC-проект, а не веб-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 домена), чтобы иметь доступ к моим методам...
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);
}