对我来说,我发现HttpContext.Current 为空,所以我创建了它:
System.Web.HttpContext c = System.Web.HttpContext.Current;
然后我将它传递到我的另一个类中的函数中,如下所示:
string myString = "Something to save";
SessionExtensions.SetDataToSession<string>(c, "MyKey1", myString);
我实际上希望我的函数成为Session 的真正扩展方法,如下所示,但我发现this HttpSessionStateBase session 为空,当我尝试添加任何内容时,它会给出NullReferenceException Session 使用它。所以这个:
public static class SessionExtensions
{
/// <summary>
/// Get value.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="session"></param>
/// <param name="key"></param>
/// <returns></returns>
public static T GetDataFromSession<T>(this HttpSessionStateBase session, string key)
{
return (T)session[key];
}
/// <summary>
/// Set value.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="session"></param>
/// <param name="key"></param>
/// <param name="value"></param>
public static void SetDataToSession<T>(this HttpSessionStateBase session, string key, object value)
{
session[key] = value;
}
}
微软在这里:https://code.msdn.microsoft.com/How-to-create-and-access-447ada98 变成了这个,而不是:
public static class SessionExtensions
{
/// <summary>
/// Get value.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="session"></param>
/// <param name="key"></param>
/// <returns></returns>
public static T GetDataFromSession<T>(HttpContext context, string key)
{
if (context != null && context.Session != null)
{
context.Session.Abandon();
}
return (T)context.Session[key];
}
/// <summary>
/// Set value.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="session"></param>
/// <param name="key"></param>
/// <param name="value"></param>
public static void SetDataToSession<T>(HttpContext context, string key, object value)
{
context.Session[key] = value;
}
}
我能够像这样检索我的数据:
System.Web.HttpContext c = System.Web.HttpContext.Current;
string myString = SessionExtensions.GetDataFromSession<string>(c, "MyKey1");
当然,既然 HttpContext.Current 和 Session 现在存在,我什至可以将其简化为:
string myString = Session["MyKey1"].ToString();
如果这是对象,您可以将对象的类型替换为 <string> 中的 SetDataToSession()
功能:
List<string> myStringList = new List<string>();
myStringList.Add("Something to save");
SessionExtensions.SetDataToSession<List<string>>(c, "MyKey1", myStringList);
然后检索它:
System.Web.HttpContext c = System.Web.HttpContext.Current;
List<string> myStringList = SessionExtensions.GetDataFromSession<List<string>>(c, "MyKey1");
或者简单地说:
List<string> myStringList = (List<string>)Session["MyKey1"];