【问题标题】:CROS error in asp.net core3.1 and signalr Coreasp.net core 3.1和signalr Core中的CORS错误
【发布时间】:2020-04-09 18:37:55
【问题描述】:

我遵循了来自

的确切教程

https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-3.1&tabs=visual-studio

然后我想从另一个 Origin 访问集线器。所以我遵循了

中的确切说明

https://docs.microsoft.com/en-us/aspnet/core/signalr/security?view=aspnetcore-3.1

但我收到此错误:

Access to XMLHttpRequest at 'http://localhost:55039/myhub/negotiate?negotiateVersion=1' from origin 'http://localhost:54114' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

代码如下:

 public void ConfigureServices(IServiceCollection services)
        {

            services.AddCors();
 services.AddSignalR(o =>
            {
                o.EnableDetailedErrors = true;
                o.HandshakeTimeout = TimeSpan.FromSeconds(5);
            });
}

和:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {   
app.UseCors(builder =>
            {
                builder.WithOrigins("http://localhost:54114/")
                    .AllowAnyHeader()
                    .WithMethods("GET", "POST")
                    .AllowCredentials();
            });
            app.UseStaticFiles();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapHub<MyHub>("/myhub");
            });
}

asp.net 核心 3.1

AspNetCore.SignalR

任何提示和指南都将得到应用

【问题讨论】:

    标签: c# asp.net-core .net-core signalr asp.net-core-signalr


    【解决方案1】:

    如下配置 CORS:

    配置服务

    services.AddCors(options => 
            options.AddPolicy("CorsPolicy",builder =>
            {
                builder.WithOrigins("http://localhost:44338")
                       .AllowAnyHeader()
                       .AllowAnyMethod()
                       .SetIsOriginAllowed((host) => true)
                       .AllowCredentials();
            }));
            services.AddSignalR(o =>
            {
                o.EnableDetailedErrors = true;
                o.HandshakeTimeout = TimeSpan.FromSeconds(5);
            });
    

    配置

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           //...
            app.UseCors("CorsPolicy");
    
            //...
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapHub<ChatHub>("/chatHub");
            });
        }
    

    【讨论】:

    • Cors 中间件应该在路由中间件之前调用。
    猜你喜欢
    • 2019-06-15
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2021-01-18
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多