public class EncryptedQueryString :
    System.Collections.Specialized.StringDictionary
{
  public EncryptedQueryString()
  {
    // Здесь ничего не делать
  }
  public EncryptedQueryString(string encryptedData)
  {
    // Расшифровать информацию и добавить
    //к словарю
  }
  public override string ToString()
  {
    // Зашифровать информацию и вернуть
    //в виде строки шестнадцатеричных кодов
  }
}

Вы сразу должны заметить одну вещь, касающуюся класса EncryptedQueryString: он унаследован от класса StringDictionary, представляющего коллекцию строк, проиндексированную строками. За счет наследования от StringDictionary вы получаете возможность использовать EncryptedQueryString как обычную строковую коллекцию. В результате можно добавлять информацию в EncryptedQueryString таким же образом, как это делается с коллекцией Request.QueryString. Вот пример:

encryptedQueryString["value1"] = "Sample Value";

Главное, что вы получаете эту функциональность бесплатно, без необходимости писать какой-либо дополнительный код. Таким образом, благодаря такому рудиментарному классу, у вас есть возможность хранить коллекцию пар строк имя-значение. Но как поместить эту информацию в строку запроса? Класс EncryptedQueryString предоставляет метод ToString(), который просматривает все данные коллекции и комбинирует их в единственную зашифрованную строку.

Во-первых, класс EncryptedQueryString должен скомбинировать отдельные значения коллекции в строку с разделителями, которую легко будет обратно превратить в коллекцию на целевой странице. В этом случае метод ToString() использует соглашения строки запроса, отделяя каждое значение от имени знаком равенства (=), а каждую пару имя-значение знаком амперсанда (&). Однако, чтобы это работало, следует убедиться, что имена и значения каждого элемента коллекции не включали в себя специальных символов. Для решения этой проблемы метод ToString() использует метод HttpServerUtility.UrlEncode() для защиты строки перед ее объединением.

Ниже показана первая порция метода ToString(), которая защищает и объединяет элементы коллекции в одну строку.

public override string ToString()
{
  StringBuilder Content = new StringBuilder();
  
  // Пройти по содержимому коллекции и построить
  // типичной строки запроса
  foreach (string key in base.Keys)

предыдущая    следующая страница    вначало главы    оглавление

1020

Hosted by uCoz