web-dev-qa-db-fra.com

Comment activer les demandes d'origine croisées dans ASP.NET MVC

J'essaie de créer une application Web qui fonctionne avec les demandes d'origine croisée (CORS) dans MVC 5. J'ai tout essayé sans résultat.

Avec un attribut  

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

        base.OnActionExecuting(filterContext);
    }
}

Avec attribut EnableCors  

 [EnableCors("*")]

Rien ne fonctionne, je commence à penser que c'est impossible

15
Petar Bechev

Pour activer les requêtes inter-origines, ajoutez l'attribut [EnableCors] à votre contrôleur API Web ou à votre méthode de contrôleur:

[EnableCors(origins: "http://systematixindia.com", headers: "*", methods: "*")]


 public class TestController : ApiController
    {
        // Controller method`enter code here`s not shown...
    }

Lire la suite

2

Ce qui me semble le plus pratique est de créer votre propre classe comme ceci:

 enter image description here

avec le code suivant dedans:

using System;
using System.Web.Mvc;

public class AllowCrossSiteAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost:4200");
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "*");
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Credentials", "true");

        base.OnActionExecuting(filterContext);
    }
}

Après cela, vous pouvez utiliser ce décorateur sur une méthode ou sur l'ensemble controller

 enter image description here  enter image description here

Vous devriez pouvoir voir cela dans votre en-tête response après cette procédure

 enter image description here

Merci à ceci réponse

27
Fitch

Ajoutez le paramètre de configuration dans votre fichier web.config pour définir la valeur de Access-Control-Allow-Origin dans customHeaders comme ceci - 

<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

Vous souhaitez visiter this et this pour plus de détails et quelques autres options.

26
Yogi

J'ai réussi à utiliser l'implémentation OWIN CORS (nuget Microsoft.Owin.Cors) pour activer Cors pour les contrôleurs MVC et le middleware Owin, en plus d'ApiControllers. Microsoft.AspNet.WebApi.Cors (à l'aide de config.EnableCors() et de l'attribut [EnableCors]) semble uniquement fonctionner avec ApiControllers. 

Voir http://benfoster.io/blog/aspnet-webapi-cors pour un exemple de code.

0
PointZeroTwo

Je pense que vous devez l'ajouter à l'étape "OnAuthentication" ou ajouter config dans votre configuration Web. Vous pouvez essayer mon code :) ça marche

 public class AllowCrossSiteJsonAttribute : ActionFilterAttribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        }

    }
0
Alex Nguyen