не удалось опубликовать в основной веб-API Asp.net с использованием проверки подлинности Windows - PullRequest
0 голосов
/ 20 марта 2019

API - это AspNetCore WebApi с конфигурацией по умолчанию для аутентификации Windows и включенной CORS.Клиент является Angular с методами GET и POST.

Вызов GET успешен:

this.http.get("https://localhost:44358/api/values", {withCredentials:true})
  .subscribe(a=> {
    console.log(a);
    this.list=a;        
  });

Ошибка POST:

this.http.post("https://localhost:44358/api/values", {value:"aaa"}, {withCredentials:true})
  .subscribe(a=> {
    console.log(a);
    this.list=a;        
  });

02 исключения:

OPTIONS https://localhost:44358/api/values 401 (Unauthorized)

и

Access to XMLHttpRequest at 'https://localhost:44358/api/values' 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.

Есть идеи, пожалуйста?

1 Ответ

0 голосов
/ 20 марта 2019

POST заставляет браузер отправлять OPTIONS в веб-интерфейсы API до реального POST. Однако webapi отклоняет этот вызов, потому что конфигурация основана только на аутентификации Windows. Решение состоит в том, чтобы включить как аутентификацию Windows для контроллеров, так и анонимную аутентификацию для OPTIONS в launchSetting.json.

"iisSettings": {
"windowsAuthentication": true, 
"anonymousAuthentication": true, 

и добавьте 1 строку перед AddMvc в Startup.cs

services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
...