Сообщение о невозможности заблокировать политику CORS во время предварительной проверки говорит, что заголовок «Access-Control-Allow-Origin» отсутствует, хотя я добавил его в перехватчик - PullRequest
0 голосов
/ 11 июля 2019

Использование: Angular 7, .net core, web api

Я недавно изменил свое приложение, чтобы использовать проверку подлинности Windows, и теперь мои когда-то работающие запросы терпят неудачу для любого сообщения и помещают (получают работу). Я получаю

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

Мне пришлось добавить угловой перехватчик, чтобы запросы get работали с включенной аутентификацией Windows.

@Injectable()
export class CredentialsInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): 
Observable<HttpEvent<any>> {
    request = request.clone({
        withCredentials: true
    });
    return next.handle(request);
  }
}

Мой startup.cs добавляет CORS следующим образом (для работы запросов get я должен установить isOriginAllowed)

services.AddCors(o => o.AddPolicy("AllowAll", builder =>
        {
            builder.SetIsOriginAllowed((host) => true)
                   .AllowAnyMethod()
                   .AllowAnyHeader()
                   .AllowCredentials();
        }));

...//Configure
app.UseCors("AllowAll");
app.UseMvc(routes =>
{
    ...

Я также пытался указать происхождение или методы .WithOrigins ("https://localhost:4200"," http://localhost:4200") или же .AllowAnyOrigin ()

А также добавление заголовка вручную во время перехвата

intercept(request: HttpRequest<any>, next: HttpHandler): 
Observable<HttpEvent<any>> {
    request = request.clone({
        withCredentials: true
    });
    request.headers.append('Access-Control-Allow-Origin', 'http://localhost:4200');
    return next.handle(request);

Чего мне не хватает? Я гуглил часами. Я понимаю, что CORS блокируется, если не указано разрешенное происхождение. Другие StackOverflow говорят, что это не может быть на стороне клиента, но я чувствую, что клиентский запрос не отправляет заголовок «Access-Control-Allow-Origin». Как я могу проверить, чтобы убедиться, что заголовок установлен? Почему бы получить работу, а не положить запросы?

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Во всех других сообщениях указывалось, в чем заключалась проблема, но не было, каково было решение проблемы. Запрос OPTIONS размещается без заголовков авторизации. Я могу сделать запрос GET, потому что передаются заголовки аутентификации Windows, но когда я делаю запрос PUT, сначала должна быть отправлена ​​опция, которая не содержит заголовок.

Для того чтобы сервер разрешил ОПЦИИ, я должен был разрешить анонимную аутентификацию для ОПЦИЙ. Я сделал это, выбрав его в свойствах проекта -> раздел отладки.

0 голосов
/ 12 июля 2019

Сервер должен установить заголовок в своем ответе.Установка его в запросе от клиента бесполезна.Попробуйте сделать запрос к конечной точке API с помощью такого инструмента, как почтальон, и посмотрите, какие заголовки устанавливаются сервером в ответе.

Скорее всего, существует проблема в коде на стороне сервера, который вызывает эту проблему.

...