У меня есть отдельные проекты для front-end (Angular) и back-end (.NET Core WEB Api). Я настроил CORS, а также аутентификацию Windows AD. Все это хорошо работает для вызовов GET, но у меня возникают проблемы с POST. Я получаю следующую ошибку.
OPTIONS http://localhost:50000/api/data/Update 401 (Unauthorized)
Access to XMLHttpRequest at 'http://localhost:50000/api/data/Update' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Error: Http failure response for http://localhost:50000/api/data/Update: 0 Unknown Error
user.component.ts
update(data: NgForm) {
if (data.form.valid) {
this.service.update(data.value)
.subscribe(
res => {
console.log('Result: ' + res);
},
err => {
console.log('Error: ' + err.message);
});
}
}
service.ts
headerOptions = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded', 'Access-
Control-Allow-Origin': '*' });
update(data: Form) {
return this.http.post(this.apiUrl + '/data/Update', data, { headers: this.headerOptions });
}
Контроллер
[HttpPost("[action]")]
public string Update([FromForm] User data)
{
if (data != null)
{
return "Ok";
}
else
{
return "Data is null";
}
}
CORS extension
public static void ConfigureCors(this IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder
.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
}
У меня также есть перехватчик внутри Angular, который отправляет «withCredentials: true» для всех вызовов.
Имейте в виду, что все мои вызовы GET работают без проблем,У меня только проблемы с POST. Если я изменю метод на угловой стороне с POST на GET, метод Update из внутреннего интерфейса будет вызываться без проблем ...