在asp.net核心信号R中阻止交叉原始请求?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在asp.net核心信号R中阻止交叉原始请求?相关的知识,希望对你有一定的参考价值。

我正在研究asp.net core signalR。我想做跨域请求。我有一个javascript客户端,当我使hubConnection跨域signalR集线器,然后下面的错误显示,来自'https://localhost:44373/chatHub/negotiate?token=12'的'https://localhost:44381'访问XMLHttpRequest已被CORS策略阻止:响应预检请求未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。

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();

答案

在您的启动类中取消注释以下行// app.UseCors("CorsPolicy");

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

编辑:

在回复您的评论时,如果您想在CORS政策中允许任何来源,请将.WithOrigins("*")替换为.AllowAnyOrigin()

以上是关于在asp.net核心信号R中阻止交叉原始请求?的主要内容,如果未能解决你的问题,请参考以下文章

从托管在被 CORS 策略阻止的 Asp.net 核心 Web 服务器中的 Angular 应用程序调用我的休息服务

ASP.NET 核心策略检查中缺少“aud”声明会阻止授权,但它位于 id 令牌中

ASP.NET MVC 阻止当前请求的视图页面缓存OutputCache

即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求

ASP.NET CORS 阻止字体请求

azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源