заблокирован политикой CORS: Access-Control-Allow-Headers не разрешает авторизацию поля заголовка запроса в ответе перед полетом - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть веб-сайт 1 и веб-API 2 У моего веб-API есть имя метода

 public string Index()
        {
            return "Hello world from site 2";
        } 

В значениях контроллера. Я звоню с веб-сайта 1 мой API, как это

$.ajax({
            url: relativeUrl,
            headers: { "Authorization": "Bearer " + accessToken },
            type: "GET"
        })
            .done(function (result) {
                console.log("Result: " + result);
                alert(result);
            })
            .fail(function (result) {
                console.log("Error: " + result.statusText);
                alert(result.statusText);
            });

Но у меня в консоли js есть следующая ошибка.

Доступ к XMLHttpRequest в «Веб-API 2» из источника «Веб-сайт 1» имеет был заблокирован политикой CORS: авторизация поля заголовка запроса не разрешено Access-Control-Allow-Headers в ответе перед полетом.

Я добавляю в свой контроллер:

[EnableCors(origins: "*", headers: "*", methods: "*", exposedHeaders: "X-Custom-Header")]

В моем WebAPIConfig.cs

config.EnableCors();

И в моем Web.config

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
  </customHeaders>
</httpProtocol>

Но даже при этом у меня все еще есть ошибка, я не понимаю, что мне нужно добавить и где.

1 Ответ

1 голос
/ 26 апреля 2019

У вас есть

<add name="Access-Control-Allow-Headers" value="Content-Type" />

и

headers: { "Authorization": "Bearer " + accessToken },

Другими словами, настройка Access-Control допускает только заголовок «content-type», но ваш запрос отправляетсязаголовок «Авторизация».Очевидно, что эти две вещи не совпадают.

Ошибка очень ясно говорит о том, что заголовок запроса «авторизация» не разрешен заголовком ответа Access-Control-Allow-Headers.

Попробуйте

<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />

вместо.

PS Не думаю, что вам нужно одновременно использовать в настройках web.config и фильтр действий EnableCors одновременно.Я думаю, что ваша декларация EnableCors здесь избыточна.См. https://stackoverflow.com/a/29972098/5947043 для получения дополнительной информации.

См. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers для получения дополнительной информации

...