Я использую клиент Angular 8 для подключения к AWS beanstalk, размещенному на .NET Core API, на котором работает Signalr.
Этот код прекрасно работал, когда я запускал приложение Angular локально.Но как только я отправил его на хостинг, я начал получать ошибки.
Я получаю эту ошибку
Мое соединение .NET Core выглядит такэто
// Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using SignalRHub;
namespace SignalR_Hub
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
{
builder
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
.WithOrigins("http://<my-site>.com/"); //<my-site> is replaced with the correct domain.
}));
services.AddSignalR();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("CorsPolicy");
app.UseSignalR(routes =>
{
routes.MapHub<NotifyHub>("/notify");
});
app.UseMvc();
}
}
}
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using SignalRHub;
using System;
namespace SignalR_Hub.Controllers
{
[Route("api/[controller]")]
[ApiController]
[EnableCors("MyPolicy")]
public class MessageController : ControllerBase
{
private IHubContext<NotifyHub, ITypedHubClient> _hubContext;
public MessageController(IHubContext<NotifyHub, ITypedHubClient> hubContext)
{
_hubContext = hubContext;
}
[HttpPost]
public string Post([FromBody]Message msg)
{
string retMessage;
try
{
_hubContext.Clients.All.BroadcastMessage(msg.Type, msg.Payload);
retMessage = "Success";
}
catch (Exception e)
{
retMessage = e.ToString();
}
return retMessage;
}
}
}
Моя настройка Angular выглядит следующим образом:
import { Component, OnInit } from '@angular/core';
import { MessageService } from 'primeng/api';
import * as signalR from '@aspnet/signalr';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [MessageService]
})
export class AppComponent implements OnInit {
constructor(private messageService: MessageService) { }
ngOnInit(): void {
const connection = new signalR.HubConnectionBuilder()
.configureLogging(signalR.LogLevel.Information)
.withUrl('http://<my-aws-setup>.elasticbeanstalk.com/notify')
.build();
connection.start().then(function () {
console.log('Connected!');
}).catch(function (err) {
return console.error(err.toString());
});
connection.on('BroadcastMessage', (type: string, payload: string) => {
this.messageService.add({ severity: type, summary: payload, detail: 'Via SignalR' });
});
}
}
Я убедился, что в моей настройке AWS s3 для Cors ничего нет.
Некоторые вещи, которые я пробовал:
- Удалены Cors из кода API, добавлена политика Cors в AWS s3.
- При запуске.cs У меня был .AllowAnyOrigins ().
- Я попытался указать этот заголовок, который, похоже, ничего не делал.
Я отправил весь свой последний код на github здесь: Клиент API