Получена ошибка 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.