Signalr .net核心,Cors问题与角度9

时间:2020-08-24 15:42:56

标签: angular asp.net-core .net-core signalr angular9

我在.net core 3.1中使用SignalR,角度为9。它提供了错误。 通过CORS策略已阻止从源“ http:// localhost:4200”访问“ http:// localhost:5000 / chathub / negotiate”处的XMLHttpRequest:对预检请求的响应未通过访问控制检查:当请求的凭据模式为“ include”时,响应中的“ Access-Control-Allow-Origin”标头不得为通配符“ *”。 XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。

我将在配置SignalR的地方分享我的创业公司,并提供在.net核心上创建的集线器。 我还提供了用角度9编写的客户端连接代码。

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
    public void ConfigureServices(IServiceCollection services)
    {

        services.AddControllers();
        services.AddSignalR();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
         app.UseCors(x => x
            .AllowAnyOrigin()
            .AllowAnyMethod()
             .AllowAnyHeader());

        app.UseRouting();
        app.UseAuthorization();
          app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapHub<ChatHub>("/chathub");
        });
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();
    }
}

这是我的集线器。

public class ChatHub: Hub
{
    public static List<UserModel> userModel = new List<UserModel>();

    
    public async Task SendMessage(UserModel model)
    {
        await Clients.All.SendAsync("ReceiveMessage", model);
    }
}

这是我用角度编写的客户端代码

export class StartComponent implements OnInit {

public _apiservice : ApiServiceService;
private _hubConnection: HubConnection; 
constructor(apiservice : ApiServiceService) {
  this._apiservice = apiservice;
  this.createConnection();  
  this.startConnection();  

}

 register(){
   this._apiservice.registerUser();
 }

  ngOnInit(): void {
  }

  private startConnection(): void {  

    this._hubConnection  
    .start()  
    .then(() => {  
    console.log('Hub connection started');   
   })  
  .catch(err => {  
    console.log('Error while establishing connection, retrying...');  
    // setTimeout(function () { this.startConnection(); }, 5000);  
    });  
  } 
  private createConnection() {  
         this._hubConnection = new HubConnectionBuilder()  
         .withUrl("http://localhost:5000/" + 'chathub')  
         .build();  
            console.log('hub connection')
   }  

 }

我正在本地计算机上工作。我的角度应用程序在http:// localhost:4200 /上运行,而点网核心应用程序在http:// localhost:5000 /

上运行

0 个答案:

没有答案