У меня есть русский блог, созданный с помощью BlogEngine.NET 1.5.
Я использую русские слова в ссылках, закодированных с помощью URLEncode, поэтому ссылки читаются человеком в большинстве браузеров - FF, Chrome, Opera (за исключением IE, но это не настоящая проблема с этим браузером). Эта идея не моя, я позаимствовал ее из Википедии - она использует закодированные URL-адреса на локализованных сайтах.
Реальная проблема заключается в том, что когда я пытаюсь добавить комментарий в IE8, это не удается (и только на рабочей машине среда разработки работает нормально).
Используя Fiddler, я обнаружил, что IE пытается отправить обратный вызов AJAX с помощью WebForm_DoCallback по неправильному адресу - кажется, что он декодирует URL, получает неправильные символы и запрашивает страницу с этим неправильным адресом с сервера и (конечно) получает 404.
Вот как выглядит некорректный запрос от IE в Fiddler:
POST /ru/post/�������������-�����.aspx HTTP/1.1
Вот как FF делает тот же запрос и получает правильный ответ:
POST /ru/post/%D0%92%D1%81%D1%82%D1%83%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%BE.aspx HTTP/1.1
Я обновил решение с ASP.NET 2.0 по умолчанию для BE до ASP.NET 3.5, но это ничего не изменило.
Обратите внимание, что в BE были внесены некоторые незначительные изменения, чтобы разрешить правильно закодированные ссылки UTF - по умолчанию он удаляет символ процента из ссылок.
Кто-нибудь может сказать мне, что не так с поведением IE здесь и как это исправить?
Почему среда разработки под ASP.NET Development отличается от рабочей машины под IIS6?
Почему IE не декодирует ссылку в адресной строке (как другие браузеры), а делает это при выполнении запроса?