Piszę tutaj, bo nie mogłem nic znaleźć na stacku, a może ktoś już kiedyś miał podobny problem i będzie wiedział co się dzieje :D
Podstawe informacje:
- API: ASP.NET Core 3.1
- Klient: Angular 8
- Serwer: IIS
Tak wygląda CORS w startup.cs:
app.UseCors(x => x.SetIsOriginAllowed(_ => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
A tak wyglądają dwie metody w Angularze:
public GetPostData(product: string, baseline: string, startDate: string, tags_any_of: string, tags_all_of: string, tags_except: string, cycle: string, os: string, vertical: string, testItemStatus: string, staticColumns: string, aggregation: string) {
return this.httpClient.get(`${environment.apiUrl}/api/Noise/${product}&${baseline}&${startDate}&${tags_any_of}&${tags_all_of}&${tags_except}&${cycle}&${os}&${vertical}&${testItemStatus}&${staticColumns}&${aggregation}`).pipe(map(response => {
return response;
},
catchError(err => ([]))));
}
public GetAllTags() {
return this.httpClient.get<TagModel[]>(`${environment.apiUrl}/api/Noise/tags`).pipe(map(response => {
console.log(response)
return response
},
catchError(err => of([]))));
};
Na czym polega problem:
Funkcja GetAllTags() przechodzi bez problemu i mogę wyciągnać dane z API, natomiast w momencie w którym puszczam funkcję GetPostData() to wywala:
Access to XMLHttpRequest at "XXX" from origin "YYY" has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Wed, 24 Jun 2020 14:27:33 GMT
Connection: close
Content-Length: 324
I nie przechodzi w dwóch wypadkach:
- Kiedy puszczam request z klienta na localhoscie do API na serwerze
- Kiedy puszczam request z klienta postawionego na tym samym serwerze, na którym stoi API.
A przechodzi w takich wypadkach:
- Z klienta na serwerze do API localhostowego
- Z klienta na localhoscie do API na localhoscie
- Wtedy, kiedy parametry są pojedyńcze, czyli np. 1 wpisany parametr dla każdej kategorii (I to działa dla wszystkich możliwości)
Funkcja odpowiedzialna za "odbiór" danych przechodzi normalnie podczas debugowania. Logowanie mam ustawione za pomocą NLoga, ale w samych logach nie ma żadnego errora, ani nic nie wywala.
Pomocy xD