2013-12-12 3 views
1

Моя основная цель - понять, что именно происходит во время процесса авторизации между клиентом (браузером) с использованием ajax и asp.net web api back-end.jquery ajax неавторизованный запрос, возвращает «NetworkError» и статус 0

Итак, сначала я делаю простой запрос GET на один из моих контроллеров (позволяющий «Access-Control-Allow-Origin») через ajax из моего браузера. Я принимаю ответ, который я хочу, и до сих пор все в порядке.

Затем я устанавливаю атрибут authorize на том же контроллере на веб-api, и я снова делаю простой запрос GET, чтобы изучить результат. Таким образом, с помощью firebug я вижу, что есть «NetworkError: 401 Unauthorized - localhost/api/values».

Кроме того, на объекте результата я вижу следующие значения: readyState: 0, responseText: "", status: 0, statusText: "error". Это нормально? Должен ли я видеть, например, статус: 401? Я думаю, что я мог бы использовать принятое решение этой темы: Unauthorized AJAX request succeeds , но я предпочитаю лучше проверить потенциальный результат 401.

Одна мысль, которую я сделал, заключается в том, что, возможно, веб-API asp.net по умолчанию при использовании атрибута authorize при несанкционированном ответе не включает заголовок «Access-Control-Allow-Origin», поэтому я добавил глобально настраиваемый фильтр действий, который добавляет «Access-Control-Allow-Origin» к каждому ответу, но это не помогло решить мою проблему, поэтому я думаю, что это не так.

ответ

2

Я нашел решение. Мое предположение о том, что вызвало эту проблему, в конечном итоге оказалось точным. Когда к контроллеру поступал несанкционированный запрос, требующий авторизации (используя атрибут authorize), тогда ответ не включал заголовок «Access-Control-Allow-Origin». Следовательно, статус jqXHR на клиенте был равен 0 вместо 401.

Итак, я добавил «Access-Control-Allow-Origin» в asp.net web api Web.config и, наконец, работал правильно.

Смежные вопросы