Request.Querystring удаляет символы из зашифрованного текста

В моем приложении я беру адрес электронной почты пользователя, шифрую его, кодирую URLEncode и передаю в QueryString.

email = Server.UrlEncode(aes.Encrypt(email));

Целевая страница выполняет Request.Querystring["email"], UrlDecodes, а затем расшифровывает.

    string email            = Server.UrlDecode(Request.QueryString["eId"]);
    string decemail         = aes.Decrypt(email);
    return decemail;

Происходило очень странное поведение, когда удалялся символ «+», и поэтому расшифровка не удалась.

Я попытался удалить UrlDecode, но это не решило проблему.

Что решило проблему, так это:

        string email            = Request.QueryString["eId"].ToString();
        string decemail         = aes.Decrypt(email);
        return decemail;

Избавление от UrlDecode и вызов ToString() в строке запроса.

Кто-нибудь знает, почему это произойдет? Вызывает ли Request.QueryString urlDecode по умолчанию? Я не думаю, что это так.

Кроме того, почему в этом случае будет работать .ToString()?


person Jack Marchetti    schedule 18.11.2009    source источник


Ответы (1)


Да правильно. Request.QueryString фактически возвращает строку, URL которой уже был декодирован.

Источники:

http://www.codeproject.com/KB/custom-controls/antiauto.aspx?msg=1475521

http://www.kamath.com/codelibrary/cl006_url.asp

person mauris    schedule 18.11.2009
comment
ааа, значит, я декодировал декодированную строку. это испортило около 90 минут моего времени, лол - person Jack Marchetti; 19.11.2009