ASP.NET MVC 2 приложение
У меня есть два действия на моем контроллере (Toons):
- [GET] Список
- [POST] Добавить
Приложение работает в режиме интеграции IIS7, поэтому / Toons / List работает нормально. Но когда я делаю POST (который перенаправляет на / Toons / List внутренне), он перенаправляет (с перемещением объекта 302) обратно на / Toons / Add.
Проблема исчезнет, если я использую хакер ASPX (работает в классическом режиме IIS6 / IIS7).
Но без .aspx - GET работает нормально, но POST перенаправляет меня на себя, но с помощью GET.
Что мне не хватает?
У меня хостинг на webhost4life.com, и они уже переключили IIS7 на интегрированный режим.
РЕДАКТИРОВАТЬ: Код работает должным образом с использованием сервера UltiDev Cassini.
РЕДАКТИРОВАТЬ: Оказалось, что проблема с косой чертой в URL. Каким-то образом IIS7 не направляет запрос должным образом, если в конце нет косой черты.
EDET: объяснение поведения
Что происходит, когда я запрашиваю (POST) /Toons/List
(без завершающего слеша), IIS не находит обработчик (у меня нет знаний, чтобы понять, как именно IIS выполняет сопоставление URL-адреса с обработчиком), и перенаправляет запрос (используя Код 302) до /Toons/List/
(обратите внимание на косую черту).
Браузер, согласно спецификации HTTP, должен перенаправить запрос , используя тот же метод (в данном случае POST), но вместо этого он обрабатывает 302, как если бы он был 303, и выдает GET * 1041. * запрос на новый URL.
Это некорректное, но известное поведение большинства браузеров.
Решением является либо использование .aspx-hack, чтобы сделать IIS однозначным способом сопоставления запросов обработчику ASP.NET, либо настройка IIS для обработки всего в виртуальном каталоге с помощью обработчика ASP.NET.
Q: как лучше справиться с этим?