在ASP.NET中更改默认会话提供程序

时间:2016-05-30 12:21:55

标签: asp.net asp.net-mvc

我想将我的会话更改为静态输入 - 我只是讨厌键入字符串,因为我做了很多错误。

我使用的是什么技术? ASP.NET MVC通过EXT.NET MVC

我试图使用web.config来做到这一点,但问题是在向其添加会话状态后,visual不会编译我的代码,因为该会话应该使用字符串作为键。

我想通过以下枚举使用会话:

public enum SessionEnum{Model}
public class Bar{
void foo(){
    Session[SessionEnum.Model] = "blah";
}
}

我知道我可以创建包装器将枚举转换为字符串,但对我来说这不是一个非常令人满意的解决方案。

public class StorageWrapper{
    public object this[SessionEnum enum]{ get{return Session[enum.toString()]}; //+set
}

我所做的是为我的所有控制器创建基类的静态对象然后我能够在它们之间使用它但是在关闭并再次打开页面之后我无法从中获取值。我想我应该以某种方式序列化它们,但我不知道如何。

有没有办法做到这一点?

修改 我的会话现在看起来像这样:

[Serializable]
public abstract class DataWrapper<T> : HttpSessionStateBase
{
    Dictionary<T, object> Dictionary { get; set; } = new Dictionary<T, object>();
    public object this[T a]
    {
        get
        {
            try
            {
                return Dictionary[a];
            }
            catch
            {
                return null;
            }
        }
        set { Dictionary[a] = value; }
    } 
}
[Serializable]
public class SessionWrapper : DataWrapper<SessionNames>
{}
public enum SessionNames { Model, Login, LastOpenedFile }

2 个答案:

答案 0 :(得分:0)

这非常简单。 创建一个UserSession对象,它执行您想要的所有操作(将您的值保存为枚举等),实例化它,然后将其放入会话中。

var US = new UserSession();
US.stuff = somestuff;
Session["UserSess"] = US

然后你可以随时使用Session["UserSess"].stuff;

答案 1 :(得分:0)

嗯,你不会使用静态const字符串而不是enum吗?

using System.Web;

public static class SessionEnum
{
    public static const string Model = "_Session_Model";
    public static const string Login = "_Session_Login";
    public static const string LastOpenedFile = "_Session_LastOpenedFile ";
}

class test
{
    void test()
    {
        Session[SessionEnum.Model] = "blah";
    }
}