J'ai une méthode d'action simple, qui renvoie du json. Il fonctionne sur ajax.example.com. J'ai besoin d'y accéder à partir d'un autre site someothersite.com.
Si j'essaye de l'appeler, j'obtiens l'attendu ...:
Origin http://someothersite.com is not allowed by Access-Control-Allow-Origin.
Je connais deux façons de contourner cela: JSONP et la création d'un HttpHandler personnalisé pour définir l'en-tête.
N'y a-t-il pas de moyen plus simple?
N'est-il pas possible pour une action simple de définir une liste des origines autorisées - ou simplement d'autoriser tout le monde? Peut-être un filtre d'action?
L'optimal serait ...:
return json(mydata, JsonBehaviour.IDontCareWhoAccessesMe);
json
asp.net-mvc-3
cors
asp.net-ajax
Kjensen
la source
la source
Réponses:
Pour les contrôleurs ASP.NET MVC simples
Créer un nouvel attribut
Marquez votre action:
Pour l'API Web ASP.NET
Balisez un contrôleur API entier:
Ou des appels API individuels:
Pour Internet Explorer <= v9
IE <= 9 ne prend pas en charge CORS. J'ai écrit un javascript qui acheminera automatiquement ces demandes via un proxy. Tout est 100% transparent (il suffit d'inclure mon proxy et le script).
Téléchargez-le à l'aide de nuget
corsproxy
et suivez les instructions incluses.Article de blog | Code source
la source
Si vous utilisez IIS 7+, vous pouvez placer un fichier web.config à la racine du dossier avec celui-ci dans la section system.webServer:
Voir: http://msdn.microsoft.com/en-us/library/ms178685.aspx Et: http://enable-cors.org/#how-iis7
la source
Je suis tombé sur un problème où le navigateur refusait de diffuser le contenu qu'il avait récupéré lorsque la demande était passée dans les cookies (par exemple, le xhr avait son
withCredentials=true
), et le site s'étaitAccess-Control-Allow-Origin
mis à*
. (L'erreur dans Chrome était "Impossible d'utiliser le caractère générique dans Access-Control-Allow-Origin lorsque l'indicateur d'informations d'identification est vrai.")Sur la base de la réponse de @jgauffin, j'ai créé ceci, qui est essentiellement une façon de contourner ce contrôle de sécurité du navigateur particulier, donc mettez en garde emptor.
la source
C'est vraiment simple, il suffit d'ajouter ceci dans web.config
Dans Origin, placez tous les domaines ayant accès à votre serveur Web, dans Headers, mettez tous les en-têtes possibles que toute demande Ajax http peut utiliser, dans les méthodes, mettez toutes les méthodes que vous autorisez sur votre serveur.
Cordialement :)
la source
Parfois, le verbe OPTIONS cause aussi des problèmes
Simplement: mettez à jour votre web.config avec ce qui suit
Et mettez à jour les en-têtes de service Web / contrôleur avec httpGet et httpOptions
la source
WebAPI 2 dispose désormais d'un package pour CORS qui peut être installé à l'aide de: Install-Package Microsoft.AspNet.WebApi.Cors -pre -project WebServic
Une fois celui-ci installé, suivez ceci pour le code: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
la source
Ajoutez cette ligne à votre méthode, si vous utilisez une API.
la source
Ce tutoriel est très utile. Pour résumer brièvement:
Utilisez le package CORS disponible sur Nuget:
Install-Package Microsoft.AspNet.WebApi.Cors
Dans votre
WebApiConfig.cs
fichier, ajoutezconfig.EnableCors()
à laRegister()
méthode.Ajoutez un attribut aux contrôleurs dont vous avez besoin pour gérer les cors:
[EnableCors(origins: "<origin address in here>", headers: "*", methods: "*")]
la source
la source
Une autre façon consiste à ajouter du code comme ci-dessous dans le fichier webApiconfig.cs.
config.EnableCors (nouveau EnableCorsAttribute (" ", en-têtes: " ", méthodes: "*", exposésHeaders: "TestHeaderToExpose") {SupportsCredentials = true});
Ou nous pouvons ajouter le code ci-dessous dans le fichier Global.Asax.
Je l'ai écrit pour les options. Veuillez modifier les mêmes selon vos besoins.
Codage heureux !!
la source
Après avoir lutté pendant toute une soirée, j'ai finalement réussi à le faire fonctionner. Après un débogage, j'ai trouvé que le problème que je rencontrais était que mon client envoyait une soi-disant demande d'options de contrôle en amont pour vérifier si l'application était autorisée à envoyer une demande de publication avec l'origine, les méthodes et les en-têtes fournis. Je ne voulais pas utiliser Owin ou un APIController, j'ai donc commencé à creuser et j'ai trouvé la solution suivante avec juste un ActionFilterAttribute. En particulier, la partie "Access-Control-Allow-Headers" est très importante, car les en-têtes mentionnés doivent correspondre aux en-têtes que votre demande enverra.
Enfin, ma méthode d'action MVC ressemble à ceci. Il est important ici de mentionner également les options HttpVerbs, car sinon la demande de contrôle en amont échouera.
la source
Dans Web.config, entrez ce qui suit
la source
Si vous utilisez IIS, je vous suggère d'essayer le module IIS CORS .
Il est facile à configurer et fonctionne pour tous les types de contrôleurs.
Voici un exemple de configuration:
la source
J'utilise DotNet Core MVC et après avoir combattu pendant quelques heures avec des packages de nuget, Startup.cs, des attributs et cet endroit, j'ai simplement ajouté ceci à l'action MVC:
Je me rends compte que c'est assez maladroit, mais c'est tout ce dont j'avais besoin, et rien d'autre ne voulait ajouter ces en-têtes. J'espère que ça aidera quelqu'un d'autre!
la source