La guía paso a paso o código que encontrarás en este artículo es la resolución más fácil y válida que encontramos a tu duda o problema.
Solución:
El problema es que cuando se usa la autenticación de Bearer (o cualquiera que me imagine), agrega un encabezado “Autorización”, y el servidor solo dará un visto bueno si la configuración permite ese encabezado.
Hay dos formas de resolver el problema, y a continuación se muestra la solamente código necesario. va en el Configure()
método en Startup.cs
en la solución Web API.
Método 1: Permitir todos los encabezados
app.UseCors(builder => builder.WithOrigins("https://localhost:44306")
.AllowAnyMethod()
.AllowAnyHeader());
Método 2: Permitir encabezados específicos
app.UseCors(builder => builder.WithOrigins("https://localhost:44306")
.AllowAnyMethod()
.WithHeaders("authorization", "accept", "content-type", "origin"));
Los encabezados adicionales se deben a que, según la documentación:
Los navegadores no son del todo consistentes en la forma en que configuran Access-Control-Request-Headers. Si usted establecer encabezados a cualquier otra cosa que no sea “*”, debe incluir al menos “aceptar”, “tipo de contenido” y “origen”, además de cualquier encabezado personalizado que desee admitir.
El encabezado Access-Control-Allow-Origin se devuelve solo si:
- La solicitud incluye un encabezado “Origen”.
- El origen solicitado coincide con la política CORS.
Luego, el servidor devuelve el encabezado ACAO con la URL de origen como valor.
El encabezado de origen generalmente lo establece el objeto XMLHttpRequest.
Para obtener más información, consulte Cómo funciona CORS
En el archivo Startup.cs, agregue lo siguiente
public CorsPolicy GenerateCorsPolicy()
var corsBuilder = new CorsPolicyBuilder();
corsBuilder.AllowAnyHeader();
corsBuilder.AllowAnyMethod();
corsBuilder.AllowAnyOrigin(); // For anyone access.
//corsBuilder.WithOrigins("http://localhost:56573"); // for a specific url. Don't add a forward slash on the end!
corsBuilder.AllowCredentials();
return corsBuilder.Build();
En el método ConfigureServices:
services.AddCors(options =>
options.AddPolicy("AllowAllOrigins", GenerateCorsPolicy());
);
// Para aplicar CORS globalmente en toda la aplicación // En el método Configure, agregue
app.UseCors("AllowAllOrigins");
[DisableCors]
Uso de DisableCors attributepodemos deshabilitar CORS para un controlador o una acción.
// Para habilitar la base del controlador CORS: si aplica globalmente, no necesita este.
[EnableCors("AllowAllOrigins")]
public class HomeController: Controller
Recuerda algo, que te brindamos la opción de aclarar si te ayudó.