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