Saltar al contenido

La política de CORS no quiere funcionar con SignalR y ASP.NET core

Hola usuario de nuestro sitio, tenemos la solución a tu interrogante, continúa leyendo y la encontrarás aquí.

Solución:

Nota esto se puede aplicar a .net core 3.1

Como se indica en los documentos de Microsoft, parece que no funciona.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    // Preceding code ommitted.
    app.UseRouting();

    app.UseCors();

    app.UseEndpoints(endpoints =>
    
        endpoints.MapControllers();
    );

    // Following code ommited.

Advertencia

Con el enrutamiento de punto final, el middleware CORS debe configurarse para ejecutarse entre las llamadas a UseRouting y UseEndpoints. Una configuración incorrecta hará que el middleware deje de funcionar correctamente.

Pero si mueve su UseCors() en primer lugar, su aplicación funcionará como se esperaba, por lo que el código de trabajo será

 public void ConfigureServices(IServiceCollection services)
        
            services.AddCors(options =>
                options.AddDefaultPolicy(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()));


public void Configure(IApplicationBuilder app, IHostingEnvironment env)

//place your useCors here 
    app.UseCors();
    app.UseRouting();


    app.UseEndpoints(endpoints =>
    
        endpoints.MapControllers();
    );

    // Following code ommited.

La respuesta aceptada no funcionó para mí, así que decidí poner aquí lo que funcionó para mí. En caso de que alguien tropiece con el mismo problema.

Estaba enfrentando el mismo problema en mis pruebas locales mientras jugaba con SignalR en Angular 9.

Lo resolví cambiando la URL de mi aplicación Asp NET Core (3.1) de https a http. si está utilizando Visual Studio,

  1. simplemente haga clic derecho en las propiedades del proyecto -> Depurar.
  2. Desmarque Habilitar SSL

Proyecto de núcleo Asp Net

Además, no olvide cambiar el puerto en su URL en la aplicación angular. Entonces, básicamente, la URL en la aplicación angular será algo como esto

this.hubConnection = new signalR.HubConnectionBuilder()
      .withUrl("http://localhost:50782/hub").build();

mientras que el código relevante en el método Configurar es algo como esto

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

   
app.UseRouting();
app.UseCors("_myAllowSpecificOrigins");

app.UseAuthorization();

app.UseEndpoints(endpoints =>

    endpoints.MapRazorPages();
    endpoints.MapHub("/hub");
);

y en su método configureServices que tenía siguiendo

    services.AddRazorPages();

    services.AddCors(options =>
        
            options.AddPolicy("_myAllowSpecificOrigins",
                builder =>
                
                    builder.WithOrigins("https://localhost:4200")
                           .AllowAnyHeader()
                           .AllowAnyMethod()
                           .SetIsOriginAllowed((x) => true)
                           .AllowCredentials();
                );
        );
    
   services.AddSignalR();

Espero que esto ayude !

ACTUALIZAR

si solo está jugando con muestras en su máquina local, también puede intentar ejecutar Chrome en modo de seguridad como se menciona aquí

en mi mac simplemente ejecuté el comando desde la terminal

open -n -a /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security

Con esto, debería poder ejecutar su muestra sin que CORS se moleste

intente algo como esto en su clase de configuración de inicio:

app.Map("/CoordinatorHub/negotiate", map =>

    map.UseCors(CorsOptions.AllowAll);
    var hubConfiguration = new HubConfiguration 
    
        // You can enable JSONP by uncommenting line below.
    // EnableDetailedErrors = true,
        // EnableJSONP = true

    ;
    map.RunSignalR(hubConfiguration);
);

Sección de Reseñas y Valoraciones

Si aceptas, tienes la libertad de dejar una sección acerca de qué le añadirías a este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *