[英]Wrapping session handling inside the static class
我将所有直接会话交互都分离到一个单独的类中并使其变为静态,因为我不想多次创建一个新对象。 但是,我希望确保没有并发问题或其他奇怪的意外。
这是代码:
public static class HttpHelper
{
public static string Get(string key)
{
object value = HttpContext.Current.Request.QueryString[key];
return (value == null) ? null : value.ToString();
}
public static string Post(string key)
{
object value = HttpContext.Current.Request.Form[key];
return (value == null) ? null : value.ToString();
}
public static string Session(string key)
{
object value = HttpContext.Current.Session[key];
return (value == null) ? null : value.ToString();
}
public static void ClearSession(string key)
{
HttpContext.Current.Session[key] = null;
}
public static void StoreInSession(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
}
如果与此有关的任何功能性问题,很多应用程序很可能早就失败了:)
但是,我要指出的是,该模型对于单元测试不是很好。 您可能要考虑使方法成为实例成员,并将Session提供程序传递到此HttpHelper对象的构造函数中。
这是一个类似问题的答案,它可能会对您有所帮助-它将使您避免完全使用键来访问会话值并为您提供类型安全的属性:
从概念上讲,您应该没问题。 即使在可能发生竞争情况的部分回发(EG,AJAX)场景中,您也应该没事。 会话状态使用读取器/写入器锁来确保您的安全。
尽管我喜欢将实际的有效会话条目(键等)封装到属性中,但我倾向于在项目中做类似的事情。 我发现它可以使应用程序代码更加一致,并且-更重要的是-消除了在魔术键字符串上键入错误的可能性,该错误可能会使应用程序以异常出乎意料的方式运行。
如果您对应用程序状态进行了类似的操作,则必须确保在设置值之前锁定和解锁值。
我不确定此包装程序是否有用,但是我认为您可以进行以下改进,而不是
public static string Get(string key)
{
object value = HttpContext.Current.Request.QueryString[key];
return (value == null) ? null : value.ToString();
}
您可以使用
public static string Get(string key)
{
return HttpContext.Current.Request.QueryString[key];
}
Post方法也是如此。 如果您可以通过StoreInSession方法在会话中存储任何对象,那么您的Session方法仅返回string是真的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.