Próbuję włączyć udostępnianie zasobów pochodzących z różnych źródeł w moim interfejsie API sieci Web platformy ASP.NET Core, ale utknąłem.
EnableCors
Atrybut przyjmuje policyName
typu string
jako parametru:
// 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);
Co to policyName
znaczy i jak mogę skonfigurować CORS w interfejsie API sieci Web platformy ASP.NET Core?
c#
asp.net-core
Oluwafemi
źródło
źródło
Odpowiedzi:
Musisz skonfigurować zasadę CORS przy uruchomieniu aplikacji w
ConfigureServices
metodzie:CorsPolicyBuilder
Wbuilder
pozwala skonfigurować zasady do swoich potrzeb. Teraz możesz użyć tej nazwy, aby zastosować zasady do kontrolerów i działań:Lub zastosuj go do każdego żądania:
źródło
UseCors
metody rozszerzenia. Pamiętaj, że oprogramowanie pośrednie CORS musi poprzedzać wszelkie zdefiniowane punkty końcowe w aplikacji, które mają obsługiwać żądania między źródłami (np. . przed każdym połączeniemUseMvc
). ”Dotyczy .NET Core 1 i .Net Core 2 (dalej w dół)
Jeśli używasz
.Net-Core 1.1
Niestety w tej konkretnej sprawie dokumenty są bardzo mylące. Sprawię, że będzie to bardzo proste:
Microsoft.AspNetCore.Cors
pakiet nuget do swojego projektuConfigureServices
metodzie dodajservices.AddCors();
W
Configure
metodzie przed wywołaniemapp.UseMvc()
iapp.UseStaticFiles()
dodaj:Otóż to. Każdy klient ma dostęp do Twojej witryny / interfejsu API ASP.NET Core.
Jeśli używasz
.Net-Core 2.0
Microsoft.AspNetCore.Cors
pakiet nuget do swojego projektuw
ConfigureServices
metodzie przed wywołaniemservices.AddMvc()
dodaj:(Ważne) W
Configure
metodzie przed wywołaniemapp.UseMvc()
dodajapp.UseCors("AllowAll");
AllowAll
to nazwa zasady, którą musimy wspomnieć w app.UserCors. Może to być dowolne imię.źródło
.UseCors()
przed.UseMvc()
Na podstawie odpowiedzi Henka udało mi się wymyślić konkretną domenę, metodę, na którą chcę pozwolić, a także nagłówek, który chcę włączyć CORS dla:
stosowanie:
źródło
To critique or request clarification from an author
Nie sądzę, żeby tak było w tym przypadku, a odpowiedź Henka została już zaznaczona. Moja odpowiedź była dodatkiem, jeśli chcesz zezwolić na określone domeny.ConfigureCors
został zmieniony naAddCors
.W szczególności w dotnet core 2.2 z SignalR musisz zmienić
.WithOrigins("http://localhost:3000")
lub.SetIsOriginAllowed(isOriginAllowed: _ => true) //for all origins
zamiast
.AllowAnyOrigin()
z.AllowCredentials()
https://trailheadtechnology.com/breaking-change-in-aspnetcore-2-2-for-signalr-and-cors/
https://github.com/aspnet/AspNetCore/issues/4483
źródło
Jeśli prowadzisz hosting w IIS, jednym z możliwych powodów jest to, że IIS blokuje
OPTIONS
czasownik. Z tego powodu spędziłem prawie godzinę:Jednym z charakterystycznych wskazań jest
404
błąd podczasOPTIONS
żądania.Aby to naprawić, musisz wyraźnie powiedzieć IIS, aby nie blokował
OPTIONS
żądania.Przejdź do filtrowania żądań:
Upewnij się, że OPCJE są dozwolone:
Lub po prostu utwórz
web.config
z następującym ustawieniem:źródło
źródło
`
`
źródło
Działa z .Net Core 3.1 w następujący sposób
1.Upewnij się, że umieścisz kod UseCors między app. UseRouting (); i app. UseAuthentication ();
2. Następnie umieść ten kod w metodzie ConfigureServices
3. I powyżej kontrolera podstawowego umieściłem to
Teraz wszystkie moje kontrolery odziedziczą po BaseController i będą miały włączone CORS
źródło
place the UseCors code between app.UseRouting(); and app.UseAuthentication();
Krok 1: Potrzebujemy pakietu Microsoft.AspNetCore.Cors w naszym projekcie. Aby zainstalować, przejdź do Narzędzia -> NuGet Package Manager -> Zarządzaj pakietami NuGet dla rozwiązania. Wyszukaj Microsoft.AspNetCore.Cors i zainstaluj pakiet.
Krok 2: Musimy wstrzyknąć CORS do pojemnika, aby mógł być wykorzystany przez aplikację. W klasie Startup.cs przejdźmy do metody ConfigureServices i zarejestrujmy CORS.
Tak więc w naszej aplikacji serwerowej przejdźmy do Kontrolery -> HomeController.cs i dodaj dekorator EnableCors do metody Index (lub konkretnego kontrolera i akcji):
Aby uzyskać więcej informacji kliknij tutaj
źródło
Wszystkie powyższe obejścia mogą działać lub mogą nie działać, w większości przypadków nie będą działać. Podałem rozwiązanie tutaj
Obecnie pracuję nad Angular i Web API (.net Core) i natknąłem się na problem CORS wyjaśniony poniżej
Powyższe rozwiązanie zawsze będzie działać. W przypadku żądania „OPCJE” naprawdę konieczne jest włączenie „Anonimowego uwierzytelnienia”. Dzięki wspomnianemu tutaj rozwiązaniu nie musisz wykonywać wszystkich wyżej wymienionych kroków, takich jak ustawienia IIS.
W każdym razie ktoś oznaczył mój powyższy post jako duplikat tego postu, ale widzę, że ten post służy tylko do włączenia CORS w ASP.net Core, ale mój post jest związany z, Włączanie i wdrażanie CORS w ASP.net Core i Angular.
źródło