2017-02-06 4 views
1

Я работаю с Angular 2 и ASP.NET Core с SignalR.Cors with Signalr

У меня есть ошибка, как показано ниже:

XMLHttpRequest не может загрузить http://localhost:55916/signalr//signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22event%22%7D%5D&_=1486394845411. Значение заголовка «Access-Control-Allow-Origin» в ответе не должно быть подстановочным знаком «*», когда режим учетных данных запроса равен «включить». Origin 'http://localhost:8080' поэтому не допускается доступ. Режим учетных данных для запросов, инициированных XML-HTTP-кодом , контролируется атрибутом withCredentials.

Существует мое приложение конфигурации:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["data:secretKey"])); 

      loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
      loggerFactory.AddDebug(); 


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

      app.UseWebSockets(); 
      app.UseSignalR("/signalr"); 

      app.UseMvc(); 
     } 

Я также Угловая ведьма служба 2 SignalR

constructor(){ 
//setups... 

    this.connection = $.hubConnection(this.baseUrl + 'signalr/'); 
    this.proxy = this.connection.createHubProxy(this.proxyName); 

    this.registerOnServerEvents(); 

    this.startConnection(); 
} 

regiestering события сервера:

private registerOnServerEvents(): void { 
     this.proxy.on('FoodAdded', (data: any) => { 
      debugger; 
      this.foodchanged.emit(data); 
     }); 

     this.proxy.on('FoodDeleted', (data: any) => { 
      debugger; 
      this.foodchanged.emit('this could be data'); 
     }); 

     this.proxy.on('FoodUpdated', (data: any) => { 
      debugger; 
      this.foodchanged.emit('this could be data'); 
     }); 

     this.proxy.on('SendMessage', (data: ChatMessage) => { 
      debugger; 
      console.log('received in SignalRService: ' + JSON.stringify(data)); 
      this.messageReceived.emit(data); 
     }); 

     this.proxy.on('newCpuValue', (data: number) => { 
      debugger; 
      this.newCpuValue.emit(data); 
     }); 
    } 

Ошибка начинается в beggining.

+0

ли решить эту проблему вы? Я также борюсь с этим :( – wh1sp3r

+0

О, я сделал, я опубликую его, дайте мне несколько минут :) – miechooy

ответ

3

Я понял это. При установлении соединения в стороне клиента я должен был добавить

withCredentials

свойство ложно

Так выглядит код:

private startConnection(): void { 
    this.connection.start({ withCredentials: false }).done((data: any) => { 
     this.connectionEstablished.emit(true); 
     this.connectionExists = true; 
    }).fail((error: any) => this.connectionEstablished.emit(false)); 
} 
+0

Это был огромный источник боли и очень пропустил в документах MS. Вы нашли где-нибудь Microsoft очерчивает все перегрузки для connection.start()? Во многих примерах, которые они просто показывают, разрешая все «*» происхождение для CORS и оставляя это на этом. Это не проблема с угловой спецификой, но при использовании любого XMLHttpRequest. – Matthew

0

Пока безопасности учетных данных используется в вашем приложении, вы должны указать домен (ы), из которых Корс запросы могут поступать на сервер:

app.UseCors(config => config.WithOrigins("http://localhost:8080")); 

Значение безопасности учетных данных значительно снижается, если вы позволяете Запросы CORS из любого домена в мире. Это то, о чем сообщается нам сообщение об ошибке.

0

Это работало для меня

app.UseCors(config => config.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials()); 

Got добавить опцию AllowCredentials