2014-11-30 14 views
31

Mam projekt MVC, w którym mam kilka metod kontrolera JSON chcę odsłonić między domenami. Nie cała strona, tylko te dwie metody.CORS w ASP .NET MVC5

Zasadniczo chcę, aby do dokładnego rzeczy podanej w tym poście na Cors:

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

Jednak problem jest, że mam regularny projekt MVC, a nie Web API, co oznacza, że nie można wykonać kroków, które naprawiają rejestr, ponieważ metoda ta nie występuje w moim projekcie MVC.

Czy istnieje sposób korzystania z tej biblioteki, mimo że jest to projekt MVC?

Jestem świadomy, że mogę config przez web.config przy użyciu:

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

Ale nie chcę narażać wszystkich metod i chcę, aby określić więcej niż jedną domenę (2 domen), aby mieć dostęp do moich metod ...

+2

możliwe duplikat [Ustawienie kontroli dostępu pozwalaj pochodzenia w ASP.NET MVC - najprostszy z możliwych sposobów] (http://stackoverflow.com/questions/6290053/setting-access-control-allow-origin -in-asp-net-MVC-najprostszy z możliwych-method) –

+0

Tak, widziałem to, ale to jest w zasadzie takie samo jak dodanie Jedyny problem polega na tym, że chcę podać 2 domeny, które mają dostęp do mojej usługi json, a nie tylko wszystkie (*) lub 1 s pecific .... – user4309587

+0

Proszę spojrzeć tutaj: https://neelbhatt40.wordpress.com/2015/09/10/what-is-cors-and-how-to-enable-it-in-asp- net-5vnext/ – Neel

Odpowiedz

53

Jak opisano tutaj: Setting Access-Control-Allow-Origin in ASP.Net MVC - simplest possible method

Trzeba tylko stworzyć filtr działania i ustawić nagłówki tam. Możesz użyć tego filtra akcji w swoich metodach działania, gdziekolwiek chcesz.

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

Jeśli chcesz dodać wiele domen, nie możesz po prostu ustawić nagłówka wiele razy. W filtrze działania musisz sprawdzić, czy żądająca domena znajduje się na liście domen, a następnie ustawić nagłówek.

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); 
    } 
+1

Tjis jest przydatny, ponieważ mogę go ograniczyć tylko dla metod, które chcę eksponować, jednak chcę zezwolić na dwie różne domeny. Nie wszystkie (*) i nie tylko jedna (www.domena.com) Czy mogę dodać więcej niż jeden nagłówek dla początku? Na przykład: filterContext.RequestContext.HttpContext.Response.AddHeader ("Access-Control-Allo w-Origin", "domain1.com"); filterContext.RequestContext.HttpContext.Response.AddHeader ("Access-Control-Allo w-Origin", "domain2.com"); – user4309587

+0

@ user4309587 Zaktualizowałem swoją odpowiedź –

+0

@ user4309587 nie możesz pobrać domeny z 'Request', a następnie warunkowo dodać poprawną wartość nagłówka? – Jasen

Powiązane problemy