2017-05-11 1 views
1

Ich habe ein ASP.Net Core und ein Web-API-Projekt in der gleichen Lösung. Ich rufe Get, Post, Put, Delete von meinem Kernprojekt, das in meinem Api-Projekt definiert ist. Definitiv muss ich CORS aktivieren.Request-Header-Feld x-ms-request-root-id ist nicht erlaubt von Access-Control-Erlaube-Header in Preflight-Antwort

Bellow ist der Code, den ich in meiner Web-Api web.config-Datei hinzugefügt,

<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> 

Und mein Ajax-Code von Kernprojekt,

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

ich sowohl die Projekte als Startprojekt festgelegt . Kein Problem. Es ruft die Api-Methode auf und gibt die Daten zurück. Aber manchmal gibt es nichts zurück, selbst die Methode gibt Daten zurück, ich bekomme den Fehler in browser console, den ich in meinem Fragetitel erwähnt habe. Ich überprüfte viele Antworten in SO, einschließlich this one, alle sagten, dass ich access control in meinem response header hinzufügen muss. Irgendjemand sagt mir, wo ich genau hinzufügen muss und was ich hinzufügen muss, damit es wie erwartet funktioniert.

Ich überprüfte auch mit Asp.net MVC-Projekt statt Core, die gleiche Sache passiert ist.

Hinweis: Ich habe CORS in meinem Web-API-Projekt nicht in meinem Web-Projekt hinzugefügt.

+0

Ist Autorisierung in Web-API-Aktion aktiviert, dh Autorisieren Attribut? –

+0

Nein. Im Moment stelle ich alle meine Api-Methoden ohne Authentifizierung zur Verfügung –

+0

Ok. Könnten Sie bitte zeigen, wie Sie CORS aktiviert haben? –

Antwort

0

Versuchen Sie folgendes:

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

    // ... 
} 

Für jede Anfrage:

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

    // ... 
} 

ODER

[EnableCors("CrossPolicy")] 

Sie können mehr Informationen in this und this Link.

Hoffentlich ist es Hilfe für Sie.

+0

Es gibt keine ApplicationOAuthProvider-Klasse oder MatchEndpoint in meiner Anwendung. Muss ich diese hinzufügen oder was? Wenn ich hinzufügen muss, wo muss ich hinzufügen? –

+0

Ich aktualisiere meine Antwort. Und Entschuldigung für meine vorherige Antwort. das ist für ASP.NET web api 2 @ BasantaMatia – Ashiquzzaman

1

Ich vermute, Sie haben CORS in Web API nicht korrekt aktiviert. Dies können Sie folgendermaßen tun:

1) Sie können das [EnableCors] -Attribut auf dem Controller in der Web-API oder global in der WebAPI-Konfig setzen.

Beispiel - [EnableCors("*", "*", "*")]. Setzen Sie dies auf den Controller (für den Sie CORS zulassen möchten). Hinweis: Sie können Attribute zu diesem Filter ändern, um bestimmte Methoden zu ermöglichen, URLs usw.

2) Aufruf enableCors in WebAPi.config dh

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

EDIT: Wenn Sie CORS aktivieren global müssen, löschen EnableCors Attribut vom Controller und ändern EnableCors() Zeile in WebApiConfig.cs-Datei zu sein:

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

Obwohl ich global will, deshalb habe ich in web.config-Datei hinzugefügt. Kein Problem. Aber wo muss ich Register Methode schreiben? –

+0

Sie müssen die Registermethode nicht schreiben. Es ist bereits in der Datei WebApiConfig.cs im Web-API-Projekt vorhanden. Es ist standardmäßig erstellt. Du musst nur die Zeile darin einfügen. –

+0

Momentan arbeite ich an ASP.Net Core. Es gibt keine Datei namens WebApiConfig.cs. Ich habe in startup.cs Datei unter Configure Methode hinzugefügt. Sagen, enthält keine Definition für EnableCors. –

Verwandte Themen