2016-04-28 26 views
4

Angular 2-Dienst einen Anruf zu einem ASP.NET-Core 1.0 Web-API-Controller-Klasse ermöglichen, aber ich habe diesen Fehler:Kann nicht Cross-Origin-Anfragen (CORS) in ASP.NET-Core 1.0

enter image description here

card.service.ts: Angular 2-Code. Dies läuft auf http://localhost:3000. Ich bezweifle, dass es hier ein Problem gibt.

import { Injectable } from 'angular2/core'; 
import { Http, Response } from 'angular2/http'; 
import { Observable } from 'rxjs/Observable'; 

import { ICard } from './card'; 

@Injectable() 
export class CardService { 
    constructor(private _http: Http) { } 

    getCards(): Observable<ICard[]> { 
     return this._http.get('http://localhost:8462/api/card') 
      .map((response: Response) => <ICard[]>response.json()) 
      .do(data => console.log("getCards: " + JSON.stringify(data))) 
      .catch(this.handleError); 
    } 

    private handleError(error: Response) { 
     console.error(error); 
     return Observable.throw(error.json().error || 'Server error') 
    }  
} 

Startup.cs: ASP.NET-Code-Core. Läuft auf http://localhost:8462. Ich glaube, das Problem besteht darin, CORS zu meiner Startup.cs-Datei hinzuzufügen. Ich habe versucht, die ASP.NET docs on CORS, sowie viele andere CORS Führer ohne Glück zu folgen.

public void ConfigureServices(IServiceCollection services) 
     services.AddMvc(); 
     services.AddCors(); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     app.UseIISPlatformHandler(); 

     app.UseApplicationInsightsExceptionTelemetry(); 

     app.StaticFiles(); 

     app.UseCors(builder => 
      builder.AllowAnyOrigin() 
        .AllowAnyHeader() 
        .AllowAnyMethod() 
      ); 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 
    } 
+0

Hmm, ich habe es gerade ausprobiert und es funktioniert gut für mich. Können Sie zeigen, wie Sie den Webservice aufrufen? Kannst du es auch ohne die "http" -Bibliothek von Angular 2 ausprobieren (was sich in der Vergangenheit als etwas merkwürdig herausgestellt hat); etwas wie 'fetch ('http: // localhost: 8462/api/card', {Modus: 'cors'})'. Überprüfen Sie außerdem die Netzwerkregisterkarte, um festzustellen, ob der Dienst tatsächlich alle CORS-Header sendet. Welche Version von ASP.NET Core läuft auch? Ist das RC1 oder hast du einige dev builds (ich habe das letzte nur getestet)? Und führen Sie dies durch IIS oder Kestrel direkt von der Befehlszeile aus? – poke

+0

Ich habe den gleichen Anruf mit Fiddler gemacht. Habe einen ähnlichen 401 Fehler. Ich laufe auf ASP.NET RC1. Ich führe es durch IIS. – Derek

Antwort

1

Ich denke, ich habe es herausgefunden. Als ich zuerst Datei> Neues Projekt ausgewählt habe, habe ich die Windows-Authentifizierung ausgewählt. Es sieht so aus, als ob das den Fehler verursacht.

Ich habe es getestet, indem ich ein neues Projekt mit Windows-Authentifizierung erstellt und CORS zu Startup.cs hinzugefügt habe. Habe den gleichen Fehler. Ich habe den Fehler nicht erhalten, als ich ein neues Projekt ohne Windows-Authentifizierung erstellt und CORS hinzugefügt habe.

0

Ich hatte die gleichen Probleme. Mein Trick war, die "UseCors .." vor "UseMvc()" zu setzen :-)