asp.net mvc 2 - потеря авторизации при RedirectToAction с данными JSON - PullRequest
1 голос
/ 06 ноября 2010

Я выполняю рефакторинг некоторого кода MVC, который первоначально использовал POST'ed данные формы .Поля формы сериализуются с использованием метода serialize () jquery и отправляются в контроллер MVC. Сохранить действие, которое проверяет все и перенаправляет в зависимости от ситуации (если ошибки в значениях формы, перенаправить на действие редактирования, если нормально, затем сохранить.и перенаправить к действию отображения).Все действия вызываются через AJAX и возвращают частичные представления.Все работает великолепно.Примечание. На сайте используется авторизация на основе AD, поэтому пользователям предлагается ввести свои учетные данные Windows при первой загрузке сайта, но больше их не запрашивают.

Однако я сейчас обращаюсь к взаимодействию с сервером через объекты JSON вместо полей формы .Конечно, я сериализирую объект JSON на клиенте и с помощью импортированного класса MVC2 Futures / MVC3 JsonValueProviderFactory могу правильно связать модель отправленного объекта JSON с классом C # в параметрах контроллера.

Я поддерживаю ту же логику, но вещи начинают взрываться, когда я пытаюсь вернуть RedirectToAction ActionResult, когда Контроллер принимает объекты JSON .Я теряю аутентификацию, у пользователя снова запрашиваются его учетные данные, и я нахожусь в бесконечном цикле первоначально запрошенного действия (сохранить).Каждый раз, когда пользователю предлагается ввести учетные данные, он просто снова выполняет действие «Сохранить».Конечный результат для пользователя - бесконечные оповещения, запрашивающие учетные данные для входа.Ни одно из действий, указанных в вызовах RedirectToAction, никогда не выполняется.

Может ли тот факт, что исходный запрос использует JSON contentType, влиять на поведение RedirectToAction? Это единственное, что я могуПодумайте, как это работает нормально, когда я не использую JSON для публикации, и работает нормально, когда я возвращаю PartialViews вместо использования RedirectToAction.Похоже, бесконечное повторение действия контроллера и постоянная потеря учетных данных авторизации указывают на то, что RedirectToAction не является подходящим решением в этой ситуации.

Я могу опубликовать код по запросу.Я также успешно обрабатываю такие вещи, как копирование ModelState в TempData и другие приемы RedirectToAction.Опять же, он работает при использовании не-JSON-решения.Любое понимание очень ценится! *


РЕДАКТИРОВАТЬ С ПОСЛЕДУЮЩЕЙ ИНФОРМАЦИЕЙ:

Оказывается, я получаю ошибку "Несанкционировано", даже когда полностью отключаюNTLM аутентификация / авторизация для сайта.Сервер IIS не ищет никакой авторизации, веб-сайт не ищет никакой авторизации, однако ошибка при попытке перенаправления с помощью запроса JSON contentType по-прежнему возникает и жалуется на то, что она «не авторизована».Это странно.

1 Ответ

0 голосов
/ 10 ноября 2010

Чтобы обновить всех, я не нашел решения, и я не знаю наверняка, какова ситуация. Однако я готов поспорить, что это связано с тем, что RedirectToAction выдает запросы HTTP GET, а действие, на которое я перенаправляю, принимает только сообщения POST. Даже если я снимаю ограничение, он все равно отправляет данные JSON, и это все равно необходимо сделать с помощью POST.

Короче говоря, RedirectToAction с данными JSON, по-видимому, принципиально невозможно отменить. Вам нужно POST-данные JSON, но RedirectToAction отправляет GET-запросы . Это моя теория, по крайней мере. =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...