2009-09-29 2 views
1

Я не знаю, если я просто чрезмерно надеюсь, но есть ли способ скрыть строку запроса, возвращаемую в URL-адресе?ASP.NET: Hide Querystring в URL

Сценарий, в котором я нахожусь, где у меня есть page1.aspx перенаправление команды на внешний сервер через сообщение, и она возвращает его на страницу2.aspx. Единственная проблема, с которой я столкнулся, заключается в том, что в URL-адресе по-прежнему остается строка с возвращаемыми переменными.

Я просто хочу скрыть уродливую строку/информацию от обычного пользователя. Так что есть способ редактировать и перезагружать это в методе pageload или просто мне нужно сохранить переменные на странице посредника, а затем нажать страницу 2.

ответ

1

Мне не нравится этот подход, но он будет работать.

Как только вы знаете, что вам нужно, вы можете Response.Redirect на ту же страницу, и они исчезнут.

4

Каково происхождение этих переменных запроса? Не можете ли вы представить все данные как данные POST, чтобы не было никаких запросов?

+0

Он возвращается с внешнего сервера, он попадает на мой page2.aspx, а URL-адрес - localhost/page2.aspx? Results = data. Поэтому у меня нет контроля над тем, как он попадает на страницу 2, я просто хочу, чтобы информация скрывалась в адресной строке. – Jared

+0

Тогда я согласен с риком, перенаправление - это путь сюда. – RedFilter

2

Некоторое время назад я сделал некоторые HTTP кодирование шифрования/дешифрования методов для этой цели. Иногда в asp.net вам нужно использовать строку запроса, но вам также нужен конечный пользователь, чтобы не знать значения. Что я делаю, это кодирование базы 64, шифрование значения, хэш-значение, основанное на моем личном ключе, и прикрепление их вместе с. С другой стороны, я проверяю хеш левой стороны, чтобы проверить подлинность и расшифровать правую сторону. Один очень хороший getcha заключается в том, что + (который является допустимым значением строки base64) равен пространству в кодировке html, поэтому я учитываю это в расшифровке.

Путь я использую это добавить зашифрованное значение в строке запроса, а затем расшифровать его на другой стороне

private const string KEY = "<random value goes here>"; 

    public static string EncryptAndHash(this string value) 
    { 
     MACTripleDES des = new MACTripleDES(); 
     MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 
     des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY)); 
     string encrypted = Convert.ToBase64String(des.ComputeHash(Encoding.UTF8.GetBytes(value))) + '-' + Convert.ToBase64String(Encoding.UTF8.GetBytes(value)); 

     return HttpUtility.UrlEncode(encrypted); 
    } 

    /// <summary> 
    /// Returns null if string has been modified since encryption 
    /// </summary> 
    /// <param name="encoded"></param> 
    /// <returns></returns> 
    public static string DecryptWithHash(this string encoded) 
    { 
     MACTripleDES des = new MACTripleDES(); 
     MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 
     des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY)); 

     string decoded = HttpUtility.UrlDecode(encoded); 
     // in the act of url encoding and decoding, plus (valid base64 value) gets replaced with space (invalid base64 value). this reverses that. 
     decoded = decoded.Replace(" ", "+"); 
     string value = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[1])); 
     string savedHash = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[0])); 
     string calculatedHash = Encoding.UTF8.GetString(des.ComputeHash(Encoding.UTF8.GetBytes(value))); 

     if (savedHash != calculatedHash) return null; 

     return value; 
    } 
+0

Спасибо, Мэтт Бриггс, за результ. Я давно искал это решение и нашел его здесь. Работает как шарм. Большое большое спасибо :) – 2010-02-23 17:26:58

0

Он сохраняет строки запроса и переменные формы (необязательно). Он не показывает реальный URL-адрес, где он перенаправляет запрос в веб-браузере пользователей. Server.Transfer происходит без браузера, зная что-либо. Браузер запрашивает страницу, но сервер возвращает содержимое другой.

protected void btnServer_Click(object sender, EventArgs e) 
{ 
    Server.Transfer("~/About.aspx?UserId=2"); 
}