Получена ошибка 400 для предполетных опций Запрос токена CORS из OWIN на основе WebAPI

Это действительно странно.

Я попытался сделать CORS-запрос к WebAPI2 (на основе OWIN) для получения токена аутентификации.

Это всегда терпит неудачу каждые два раза. как 1-й запрос не удается, но 2-й запрос будет проходить. И 3-й сбой, но 4-й пройдет.

Я не понимаю, почему это работало в половине случаев.

Я проверяю запрос браузера (хром).

Получивший ошибку всегда идет методом OPTIONS. Тот, который прошел, всегда проходит ПОЧТА.

Но я всегда использую метод post с заголовками Content-Type: application/x-www-form-urlencoded

Поэтому я предполагаю, что вопрос в том, почему когда-нибудь Chrome / fire fox отправляют предварительный запрос, а иногда нет.

Кстати, он работает совершенно нормально в IE.

1 ответ

Вы правы, что и Chrome, и FireFox используют предварительный запрос OPTIONS. Таким образом, перед выполнением POST Chrome/FireFox отправляет запрос с глаголом OPTIONS. Если он не получит ответ от сервера, который сообщает браузеру, что ему разрешено отправлять междоменный запрос, вы получите сообщение об ошибке, и последующий POST не будет опубликован.

Вы должны включить OPTIONS в вашем файле web.config (или использовать один из подходов, перечисленных в этой статье): http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Для web.config попробуйте:

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

IE медленно внедряет стандарты CORS, поэтому IE работает нормально без включенных OPTIONS.

Другие вопросы по тегам