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
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...
}
Ce qui me semble le plus pratique est de créer votre propre classe comme ceci:
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
Vous devriez pouvoir voir cela dans votre en-tête response après cette procédure
Merci à ceci réponse
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.
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.
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", "*");
}
}