Estoy tratando de habilitar el intercambio de recursos de origen cruzado en mi API web ASP.NET Core, pero estoy atascado.
El EnableCors
atributo acepta policyName
de tipo string
como parámetro:
// Summary:
// Creates a new instance of the Microsoft.AspNetCore.Cors.Core.EnableCorsAttribute.
//
// Parameters:
// policyName:
// The name of the policy to be applied.
public EnableCorsAttribute(string policyName);
¿Qué policyName
significa y cómo puedo configurar CORS en una API web ASP.NET Core?
c#
asp.net-core
Oluwafemi
fuente
fuente
Respuestas:
Debe configurar una política CORS al inicio de la aplicación en el
ConfigureServices
método:El
CorsPolicyBuilder
enbuilder
le permite configurar la política para sus necesidades. Ahora puede usar este nombre para aplicar la política a controladores y acciones:O aplíquelo a cada solicitud:
fuente
UseCors
método de extensión. Tenga en cuenta que el middleware CORS debe preceder a cualquier punto final definido en su aplicación que desee admitir solicitudes de origen cruzado (ej. . antes de cualquier llamada aUseMvc
) ".Se aplica a .NET Core 1 y .Net Core 2 (más abajo)
Si usa
.Net-Core 1.1
Lamentablemente, los documentos son muy confusos en este caso específico. Así que lo haré muy simple:
Microsoft.AspNetCore.Cors
paquete nuget a su proyectoConfigureServices
método, agregueservices.AddCors();
En
Configure
método, antes de llamarapp.UseMvc()
yapp.UseStaticFiles()
agregar:Eso es. Cada cliente tiene acceso a su sitio web / API de ASP.NET Core.
Si usa
.Net-Core 2.0
Microsoft.AspNetCore.Cors
paquete nuget a su proyectoen
ConfigureServices
método, antes de llamarservices.AddMvc()
, agregue:(Importante) En el
Configure
método, antes de llamarapp.UseMvc()
, agregueapp.UseCors("AllowAll");
AllowAll
es el nombre de la política que debemos mencionar en app.UserCors. Podría ser cualquier nombre.fuente
.UseCors()
antes.UseMvc()
Basado en la respuesta de Henk, he podido encontrar el dominio específico, el método que quiero permitir y también el encabezado para el que quiero habilitar CORS:
uso:
fuente
To critique or request clarification from an author
No creo que ese sea el caso aquí y la respuesta de Henk ya ha sido marcada. Mi respuesta fue un complemento si desea permitir dominios específicos.ConfigureCors
se cambió aAddCors
.Específicamente en dotnet core 2.2 con SignalR debes cambiar
.WithOrigins("http://localhost:3000")
o.SetIsOriginAllowed(isOriginAllowed: _ => true) //for all origins
en cambio
.AllowAnyOrigin()
con.AllowCredentials()
https://trailheadtechnology.com/breaking-change-in-aspnetcore-2-2-for-signalr-and-cors/
https://github.com/aspnet/AspNetCore/issues/4483
fuente
Si está alojando en IIS, una posible razón es que está obteniendo esto porque IIS está bloqueando el
OPTIONS
verbo. Pasé casi una hora por esto:Una indicación reveladora es que está recibiendo un
404
error durante laOPTIONS
solicitud.Para solucionar esto, debe decirle explícitamente a IIS que no bloquee la
OPTIONS
solicitud.Vaya a Solicitud de filtrado:
Asegúrese de que las OPCIONES estén permitidas:
O simplemente cree un
web.config
con la siguiente configuración:fuente
fuente
``
``
fuente
Conseguí esto trabajando con .Net Core 3.1 de la siguiente manera
1.Asegúrese de colocar el código UseCors entre app.UseRouting (); y app.UseAuthentication ();
2. Luego coloque este código en el método ConfigureServices
3. Y encima del controlador base coloqué esto
Ahora todos mis controladores heredarán de BaseController y tendrán CORS habilitado
fuente
place the UseCors code between app.UseRouting(); and app.UseAuthentication();
Paso 1: Necesitamos el paquete Microsoft.AspNetCore.Cors en nuestro proyecto. Para la instalación, vaya a Herramientas -> Administrador de paquetes NuGet -> Administrar paquetes NuGet para la solución. Busque Microsoft.AspNetCore.Cors e instale el paquete.
Paso 2: Necesitamos inyectar CORS en el contenedor para que pueda ser utilizado por la aplicación. En la clase Startup.cs, vayamos al método ConfigureServices y registremos CORS.
Entonces, en nuestra aplicación de servidor, vamos a Controladores -> HomeController.cs y agreguemos el decorador EnableCors al método Index (o su controlador y acción específicos):
Para más detalles haga clic aquí
fuente
Toda la solución mencionada anteriormente puede funcionar o no, en la mayoría de los casos no funcionará. He dado la solución aquí
Actualmente estoy trabajando en Angular y Web API (.net Core) y encontré el problema CORS explicado a continuación
La solución proporcionada anteriormente siempre funcionará. Con la solicitud 'OPCIONES' es realmente necesario habilitar 'Autenticación anónima'. Con la solución mencionada aquí, no tiene que hacer todos los pasos mencionados anteriormente, como la configuración de IIS.
De todos modos, alguien marcó mi publicación anterior como duplicada con esta publicación, pero puedo ver que esta publicación es solo para habilitar CORS en ASP.net Core, pero mi publicación está relacionada con Habilitar e implementar CORS en ASP.net Core y Angular.
fuente