C# asp.net核心信号器中的跨源请求被阻止?

C# asp.net核心信号器中的跨源请求被阻止?,c#,asp.net-core,asp.net-core-signalr,C#,Asp.net Core,Asp.net Core Signalr,我正在asp.net核心信号器上工作。我想进行跨域请求。我有一个javascript客户端,当我连接到跨域signalR hub时,下面的错误显示, CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头 Javascript客户端代码 var connection = new signalR.HubConnectionBuilder().withUrl("https://localhost:44373/

我正在asp.net核心信号器上工作。我想进行跨域请求。我有一个javascript客户端,当我连接到跨域signalR hub时,下面的错误显示, CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头

Javascript客户端代码

var connection = new signalR.HubConnectionBuilder().withUrl("https://localhost:44373/chatHub?token="+12).build();
跨域信号机项目中的启动类

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
    {
        builder
           .AllowAnyMethod()
           .AllowAnyHeader()
           .WithOrigins("*")
           .AllowCredentials();
    }));
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddCors();
    services.AddSignalR();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    //app.UseCors(builder =>
    //{
    //    builder.WithOrigins("*")
    //       .AllowAnyHeader()
    //       .AllowAnyMethod()
    //       //.WithMethods("GET", "POST")
    //       .AllowCredentials();
    //});

    // ... other middleware ...
   // app.UseCors("CorsPolicy");
    app.UseSignalR(routes =>
    {
        routes.MapHub<ChatHub>("/chatHub");
    });

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}
public void配置服务(IServiceCollection服务)
{
配置(选项=>
{
//此lambda确定给定请求是否需要非必要cookie的用户同意。
options.checkApprovered=context=>true;
options.MinimumSameSitePolicy=SameSiteMode.None;
});
services.AddCors(options=>options.AddPolicy(“CorsPolicy”,builder=>
{
建设者
.AllowAnyMethod()
.AllowAnyHeader()
.带原产地(“*”)
.AllowCredentials();
}));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddCors();
services.AddSignalR();
}
//此方法由运行时调用。使用此方法配置HTTP请求管道。
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Error”);
//默认的HSTS值为30天。您可能希望在生产场景中更改此值,请参阅https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
//app.UseCors(builder=>
//{
//建筑商。带原产地(“*”)
//.AllowAnyHeader()
//.AllowAnyMethod()
////.WithMethods(“获取”、“发布”)
//.AllowCredentials();
//});
//…其他中间件。。。
//附录UseCors(“公司政策”);
app.usesigner(路由=>
{
routes.MapHub(“/chatHub”);
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}

在您的startup类中,取消对以下行的注释
//app.UseCors(“CorsPolicy”)

您已经在
ConfigureServices()
方法中构建了策略,现在您需要告诉应用程序在
Configure()
方法中使用该策略

编辑:

作为对您评论的回应,如果您希望在CORS政策中允许任何来源,
.WithOrigins(“*”)
替换为
.AllowAnyOrigin()

您有两个
服务。AddCors
调用,这是必要的吗?我只使用了一个服务。AddCors()您有两个调用,一个在
服务的上方和下方。AddMvc()。
方法。O是的,不,我没有这两个调用,但现在,它给出了以下错误,CORS策略已阻止从源站“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:当请求的凭据模式为“包括”时,响应中“访问控制允许源站”标头的值不得为通配符“*”。XMLHttpRequest启动的请求的凭据模式由withCredentials属性控制。如错误所述。不要在allowOrigins中使用通配符。您应该指定允许哪些来源好的,在移动客户端的情况下我们会怎么做?来源是什么?来源将在来源标题下的请求中指定。Mobile不会检查cors,除非它是webview。对于测试阶段的桌面浏览器,请使用cors chrome扩展