如何使用信号器允许 cors

Posted

技术标签:

【中文标题】如何使用信号器允许 cors【英文标题】:How to allow cors with signalr 【发布时间】:2021-12-05 20:18:16 【问题描述】:

使用 Signalr 处理应用程序,设法通过连接到 API 来解决 cors 错误,但是当尝试连接到集线器时,它显示下面的错误,即使使用不同的端口在我的本地计算机上调试时也不会发生.

CORS 政策已阻止访问来自源“http://iisServer”的“http://iisServer:10079/fareg/signalr/negotiate?negotiateVersion=1”获取:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

这是我在应用上的配置

        public void ConfigureServices(IServiceCollection services)
    

        services.AddCors();
        services.AddSignalR();//.AddMessagePackProtocol();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        //add Windows authentication for http options request
        services.AddAuthentication(IISDefaults.AuthenticationScheme);
        services.AddMvc(config =>
        
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            config.Filters.Add(new AuthorizeFilter(policy));
        );

        services.AddDbContext<FAContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("FADB")));


        
    

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    
        app.UseCors(options =>
        
            //options.WithOrigins("http://schi-iis1zsus", "http://localhost:4200");
            options.AllowAnyOrigin();
            options.AllowAnyMethod();
            options.AllowAnyHeader();
            options.AllowCredentials();
        );

        app.UseSignalR(routes =>
        
            routes.MapHub<Hubs.HubFA>("/signalr");
        );

        if (env.IsDevelopment())
        
            app.UseDeveloperExceptionPage();
        
        else
        
            app.UseHsts();
        

        app.UseHttpsRedirection();



        app.UseMvc();
    

请帮忙,我到处寻找,但没有找到解决此问题的方法。

【问题讨论】:

您是否在 IIS 上安装了 CORS 模块? ***.com/questions/59468525/… 这能回答你的问题吗? Access to XMLHttpRequest has been blocked origin ASP.NET CORE 2.2.0 / Angular 8 / signalr1.0.0 [(CORS Policy-Access-Control-Allow-Origin) failed] 如何在 IIS 上安装 CORS 模块? 参考this docs有下载链接。 【参考方案1】:

https://docs.microsoft.com/aspnet/core/signalr/security?view=aspnetcore-5.0#cross-origin-resource-sharing

您要么需要明确指定来源,要么删除 AllowCredentials() 并将客户端 withCredentials 设置为 false https://docs.microsoft.com/aspnet/core/signalr/configuration?view=aspnetcore-5.0&tabs=javascript#configure-additional-options-1

【讨论】:

以上是关于如何使用信号器允许 cors的主要内容,如果未能解决你的问题,请参考以下文章

信号器 CORS 问题

不允许使用 CORS 405 方法

如何允许 CORS 使用多个端口?

Spring Boot - 如何在 REST 控制器 HTTP PUT 上允许 CORS

如何在 Jersey 中使用 ContainerResponseFilter 允许 CORS 的多个域。?

如何使用通配符来允许特定域 CORS?