Internet Explorer, Safari, Opera удаляют хеш-значение из returnUrl

Я хочу сохранить хеш-значение в returnURL, когда пользователь отправляется на контроллер LogOn, но IE7-9/Safari/Opera удаляет его.

Например, я пробую этот URL

http://localhost:18314/#&t={DA3DB617-F9A3-4668-93E6-BBB2E37B928F}

Пользователь не авторизован и отправлен на контроллер LogOn. Я получаю только это в IE7-9, Safari, Opera:

http://localhost:18314/Login/LogOn?ReturnUrl=%2f

Но в FireFox и Chrome:

http://localhost:18314/Login/LogOn?ReturnUrl=%2f#&t={DA3DB617-F9A3-4668-93E6-BBB2E37B928F}

Почему и как исправить?!

Спасибо! :-)


person podeig    schedule 07.10.2011    source источник


Ответы (2)


Вы должны избежать хеша, используя% 23

так это:

?ReturnUrl=%2fFolder1#Hash

становится:

?ReturnUrl=%2fFolder1%23Hash

Проверено в IE9.

person Mark Lauter    schedule 04.01.2012

Все после хэша не отправляется на сервер. Хорошо, что вы можете обмениваться файлами cookie между кодом клиента и кодом сервера. У меня была такая же проблема, и в итоге я добавил свое хэш-значение в один файл cookie.

// Note that I am using 3rd part library for cookies
<script src="~/scripts/jquery-1.10.2.js"></script>
<script src="~/scripts/jquery.cookie.js"></script>
<script type="text/javascript">
    $(function () {
        var cookieKey = "MYHASH";
        $.removeCookie(cookieKey);
        $.cookie(cookieKey, window.location.hash, { expires: 7, path: '/' });
    })
</script>

Позже, когда я обрабатываю подключенного пользователя в своем контроллере, значение Request.Cookies["MYHASH"]; даст мне хеш-значение, чтобы я мог перенаправить пользователя. Я уверен, что с некоторыми изменениями это может помочь вам решить проблему.

person Andrej Kaurin    schedule 21.10.2013