Reputation: 1932
I am using Angular 8 client to connect to an AWS beanstalk hosted .NET Core API that runs Signalr.
This code was all running perfectly fine while I was running my Angular app locally. But as soon as I pushed it up to be hosted, I started getting errors.
My .NET Core connection looks like this
// 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;
}
}
}
My Angular setup looks like this:
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' });
});
}
}
I made sure that there is nothing in my AWS s3 setup for Cors.
Some things I have tried:
I pushed all my latest code to github here: Client API
Upvotes: 0
Views: 949
Reputation: 82
You will need to remove /
from the end of URI
just change http://<my-site>.com/
to http://<my-site>.com
and it should work!
Upvotes: 1
Reputation: 152
I use below code and work for me fine
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors(
options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
);
}
Upvotes: 0