ASP.NET MVC приложениеASP.NET MVC: странное поведение POST
У меня есть два действия на моем контроллере (Toons):
- [GET] Список
- [POST] Add
Приложение работает в режиме интеграции IIS7, поэтому/Toons/List отлично работает. Но когда я делаю POST (который перенаправляет/Toons/List внутри), он перенаправляет (с 302 перемещенными объектами) обратно в/Toons/Add.
Проблема уходит, если я использую .aspx hack (работает в классическом режиме IIS6/IIS7).
Но без .aspx - GET работает нормально, но POST перенаправляет меня на себя, но с GET.
Что мне не хватает?
Я хостинг с webhost4life.com, и они уже изменили IIS7 в интегрированный режим.
EDIT: Код работает как ожидается, используя сервер UltiDev Cassini.
EDIT: Оказалось, что проблема связана с чересстрочной косой чертой. Как-то IIS7 не направляет запрос должным образом, если в конце нет косой черты.
Edet: Объяснение поведения
Что происходит, когда я прошу (POST) /Toons/List
(без пробелов), IIS не находит обработчик (у меня нет знаний, чтобы понять, как именно IIS делает URL -to-handler mapping) и перенаправляет запрос (используя код 302) на /Toons/List/
(обратите внимание на косую черту).
браузер, в соответствии со спецификацией HTTP, необходимо перенаправить запрос используя тот же метод (POST в данном случае), но вместо этого он обрабатывает 302, как будто это 303 и выдает GET запрос на новый URL.
Это неправильное, но известное поведение большинства браузеров.
Решение заключается в использовании .aspx-hack, чтобы сделать его однозначным для IIS, как сопоставить запросы обработчику ASP.NET или настроить IIS для обработки всего в виртуальном каталоге с помощью обработчика ASP.NET.
Вопрос: Что такое лучший способ справиться с этим?
Каков код для вашего действия Add? –
return RedirectToAction («Список», «Toons»); –
Что произойдет, если вы возьмете [GET] из действия «Список»? – 37Stars