2017-05-11 1 views
1

J'ai un ASP.Net Core et un projet Web Api dans la même solution. J'appelle Get, Post, Put, Delete à partir de mon projet de base qui est défini dans mon projet Api. Définitivement, je dois activer CORS.Champ d'en-tête de requête x-ms-request-root-id n'est pas autorisé par Access-Control-Allow-Headers dans la réponse de pré-contrôle

Bellow est le code que j'ai ajouté dans mon fichier web.config Api Web,

<httpProtocol> 
    <customHeaders> 
    <!-- Enable Cross Domain AJAX calls --> 
    <clear /> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="Content-Type"/> 
    </customHeaders> 
</httpProtocol> 

Et mon code Ajax projet de base,

$.ajax({ 
     "url": "myApiUrl", 
     "type": "Get", 
     "data": { 
      //Here I'm passing a value 
     }, 
     success: function (d) { 
     } 

je définir à la fois les projets comme projet de démarrage . Pas une solution. Il appelle la méthode Api et renvoie les données. Mais parfois, il ne retourne rien, même la méthode renvoie des données, je reçois l'erreur dans browser console que j'ai mentionné dans le titre de ma question. J'ai vérifié beaucoup de réponses dans SO, y compris this one, tous ont dit que je dois ajouter access control dans mon response header. N'importe qui me dit où j'ai besoin d'ajouter exactement et ce que j'ai besoin d'ajouter pour que cela fonctionne comme prévu.

J'ai vérifié aussi avec le projet Asp.net MVC à la place de Core, la même chose s'est produite.

Remarque: J'ai ajouté CORS dans mon projet Web Api et non dans mon projet Web.

+0

est-autorisation activée dans l'action de l'API Web-à-dire Autorisez attribut? –

+0

Non. Pour l'instant, je fournis toutes mes méthodes Api sans authentification –

+0

Ok. Pourriez-vous montrer comment vous avez activé CORS? –

Répondre

0

Essayez ceci:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCors(o => o.AddPolicy("CrossPolicy", builder => 
    { 
     builder.AllowAnyOrigin() 
       .AllowAnyMethod() 
       .AllowAnyHeader(); 
    })); 

    // ... 
} 

Pour toute demande:

public void Configure(IApplicationBuilder app) 
{ 
    app.UseCors("CrossPolicy"); 

    // ... 
} 

OU

[EnableCors("CrossPolicy")] 

Vous pouvez trouver plus d'informations en lien this et this.

J'espère que c'est de l'aide pour vous.

+0

Il n'existe aucune classe ApplicationOAuthProvider ou MatchEndpoint dans mon application. Ai-je besoin d'ajouter ceux-ci ou quoi? Si je dois ajouter puis où dois-je ajouter? –

+0

Je mets à jour ma réponse. Et désolé pour ma réponse précédente. c'est pour ASP.NET web api 2 @ BasantaMatia – Ashiquzzaman

1

Je suppose que vous n'avez pas correctement activé CORS dans l'API Web. Vous pouvez le faire en suivant le processus suivant:

1) Vous pouvez placer l'attribut [EnableCors] sur le contrôleur dans Web API ou globalement dans WebAPI Config.

Exemple - [EnableCors("*", "*", "*")]. Mettez ceci sur le contrôleur (pour lequel vous voulez autoriser CORS). Remarque: Vous pouvez modifier les attributs de ce filtre pour permettre certaines méthodes, URL, etc.

2) Appel enableCors à WebAPi.config-à-dire

public static void Register(HttpConfiguration config) 
    { 
    // Other configuration omitted 
    config.EnableCors(); 
    } 

EDIT: Si vous devez activer CORS globalement, supprimer EnableCors attribut du contrôleur et modifier EnableCors() la ligne dans le fichier de WebApiConfig.cs être:

config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 
+0

Bien que je veuille globalement, c'est pourquoi j'ai ajouté dans le fichier web.config. Pas de problème. Mais où dois-je écrire la méthode Register? –

+0

Vous n'avez pas besoin d'écrire la méthode de registre. Il est déjà présent dans le fichier WebApiConfig.cs dans le projet web api. C'est créé par défaut. Vous avez juste besoin d'ajouter la ligne à l'intérieur. –

+0

Actuellement, je travaille sur ASP.Net Core. Il n'y a pas de fichier appelé WebApiConfig.cs. J'ai ajouté dans le fichier startup.cs sous la méthode Configure. Dire, ne contient pas de définition pour EnableCors. –