net mvc enable asp c# asp.net-core

c# - mvc - Cómo habilitar CORS en ASP.NET Core



enable cors web config (7)

Tienes que configurar en la clase Startup.cs

services.AddCors(options => { options.AddPolicy("CorsPolicy", builder => builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); });

Estoy tratando de habilitar el intercambio de recursos de origen cruzado en mi API web ASP.NET Core, pero estoy atascado.

El atributo EnableCors 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é significa policyName y cómo puedo configurar CORS en una API web ASP.NET Core?


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:

public void ConfigureServices(IServiceCollection services) { services.AddCors(options => options.AddPolicy("AllowSpecific", p => p.WithOrigins("http://localhost:1233") .WithMethods("GET") .WithHeaders("name"))); services.AddMvc(); }

uso:

[EnableCors("AllowSpecific")]


Debe configurar una política CORS al inicio de la aplicación en el método ConfigureServices :

public void ConfigureServices(IServiceCollection services) { services.AddCors(o => o.AddPolicy("MyPolicy", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); })); // ... }

CorsPolicyBuilder en el builder permite configurar la política según sus necesidades. Ahora puede usar este nombre para aplicar la política a controladores y acciones:

[EnableCors("MyPolicy")]

O aplíquelo a cada solicitud:

public void Configure(IApplicationBuilder app) { app.UseCors("MyPolicy"); // ... }



Si está alojando en IIS, una posible razón es que está obteniendo esto porque IIS está bloqueando el verbo OPTIONS . Pasé casi una hora por esto:

Una indicación reveladora es que está recibiendo un error 404 durante la solicitud de OPTIONS .

Para solucionar esto, debe decirle explícitamente a IIS que no bloquee la solicitud de OPTIONS .

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:

<system.webServer> <security> <requestFiltering> <verbs> <remove verb="OPTIONS" /> <add verb="OPTIONS" allowed="true" /> </verbs> </requestFiltering> </security> </system.webServer>


``

public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowAnyOrigin", builder => builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()); }); services.Configure<MvcOptions>(options => { options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAnyOrigin")); }); }

``


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:

  • Agregue Microsoft.AspNetCore.Cors paquete nuget Microsoft.AspNetCore.Cors a su proyecto
  • En el método ConfigureServices , agregue services.AddCors();
  • En el método Configure , antes de llamar a app.UseMvc() y app.UseStaticFiles() , agregue:

    app.UseCors(builder => builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials());

Eso es. Cada cliente tiene acceso a su sitio web / API de ASP.NET Core.

Si usa .Net-Core 2.0

  • Agregue Microsoft.AspNetCore.Cors paquete nuget Microsoft.AspNetCore.Cors a su proyecto
  • en el método ConfigureServices , antes de llamar a services.AddMvc() , agregue:

    services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); });

  • (Importante) En el método Configure , antes de llamar a app.UseMvc() , agregue app.UseCors("AllowAll");

    AllowAll es el nombre de la política que debemos mencionar en app.UserCors. Podría ser cualquier nombre.