wake-up-neo.com

So aktivieren Sie CORS in ASP.NET Core

Ich versuche, die gemeinsame Nutzung von Origin-Ressourcen für meine ASP.NET Core-Web-API zu aktivieren, aber ich bin festgefahren. 

Das EnableCors-Attribut akzeptiert policyName vom Typ string als Parameter: 

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

Was bedeutet policyName und wie kann ichCORSauf einer ASP.NET Core-Web-API konfigurieren?

110
Oluwafemi

Sie müssen eine CORS-Richtlinie beim Anwendungsstart in der ConfigureServices-Methode konfigurieren:

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

    // ...
}

Mit der Variable CorsPolicyBuilder in builder können Sie die Richtlinie an Ihre Anforderungen anpassen. Sie können diesen Namen jetzt verwenden, um die Richtlinie auf Controller und Aktionen anzuwenden:

[EnableCors("MyPolicy")]

Oder wenden Sie es auf jede Anfrage an:

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

    // ...
}
185
Henk Mollema

Dies ist für .Net-Core 1.1

Leider sind die Dokumente in diesem speziellen Fall sehr verwirrend. Also mache ich es ganz einfach:

  • Fügen Sie das Microsoft.AspNetCore.Cors-Nuget-Paket zu Ihrem Projekt hinzu
  • Fügen Sie in der ConfigureServices-Methode services.AddCors(); hinzu.
  • Fügen Sie in der Configure-Methode vor dem Aufruf von app.UseMvc() und app.UseStaticFiles() Folgendes hinzu:

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

Das ist es. Jeder Client hat Zugriff auf Ihre ASP.NET Core-Website/API.

Für .Net-Core 2.0

  • Fügen Sie das Microsoft.AspNetCore.Cors-Nuget-Paket zu Ihrem Projekt hinzu
  • fügen Sie in der ConfigureServices-Methode vor dem Aufruf von services.AddMvc() Folgendes hinzu:

     services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder =>
                {
                    builder
                    .AllowAnyOrigin() 
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();
                });
        });
    
  • Fügen Sie in der Configure-Methode vor dem Aufruf von app.UseMvc()app.UseCors("AllowAll"); hinzu.

    AllowAll ist der Richtlinienname, den wir in app.UserCors angeben müssen. Es könnte ein beliebiger Name sein.

73
Vahid Amiri

Basierend auf Henks Antwort konnte ich die spezifische Domäne, die Methode, die ich zulassen möchte, und auch den Header, für den ich CORS aktivieren möchte, finden:

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

verwendungszweck:

[EnableCors("AllowSpecific")]
31
Oluwafemi

Sie müssen in der Startup.cs-Klasse `konfigurieren 

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

Speziell in Dotnet Core 2.2 mit SignalR müssen Sie dies ändern

.WithOrigins("http://localhost:3000") oder

.SetIsOriginAllowed(isOriginAllowed: _ => true) //for all origins

stattdessen .AllowAnyOrigin() mit .AllowCredentials()

https://trailheadtechnology.com/breaking-change-in-aspnetcore-2-2-for-signalr-and-cors/

https://github.com/aspnet/AspNetCore/issues/4483

2
PJ3

`

    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"));
        });            
    }

`

2
Nathan Alard

Wenn Sie auf IIS hosten, besteht ein möglicher Grund darin, dass Sie dies erhalten, weil IIS OPTIONS verb blockiert. Ich verbrachte aus diesem Grund fast eine Stunde:

Ein verräterischer Hinweis ist, dass Sie während der OPTIONS-Anforderung einen 404-Fehler erhalten.

Um dies zu beheben, müssen Sie IIS not explizit mitteilen, dass die OPTIONS-Anforderung blockiert werden soll.

Gehe zur Anforderungsfilterung:

 IIS Request Filtering

Vergewissere dich, dass OPTIONS erlaubt ist:

 Make sure OPTIONS is True

Oder erstellen Sie einfach einen web.config mit der folgenden Einstellung:

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