У меня на самом деле есть служебный класс, который использует Generics для «переноса» сеанса, который выполняет всю «грубую работу» за меня, у меня также есть кое-что почти идентичное для работы со значениями QueryString.
Это помогает удалить дубликаты кода для (часто многочисленных) проверок.
Например:
public class QueryString
{
static NameValueCollection QS
{
get
{
if (HttpContext.Current == null)
throw new ApplicationException("No HttpContext!");
return HttpContext.Current.Request.QueryString;
}
}
public static int Int(string key)
{
int i;
if (!int.TryParse(QS[key], out i))
i = -1; // Obviously Change as you see fit.
return i;
}
// ... Other types omitted.
}
// And to Use..
void Test()
{
int i = QueryString.Int("test");
}
Примечание:
Это очевидно использует статику, которая не нравится некоторым людям из-за того, как она может влиять на тестовый код. Вы можете легко реорганизовать что-то, что работает на основе экземпляров и любых интерфейсов, которые вам требуются. Я просто думаю, что пример статики самый легкий.
Надеюсь, это поможет / даст пищу для размышлений.