从静态类

时间:2016-05-10 18:27:18

标签: c# asp.net-mvc session-state

使用MVC 5的ASP.NET 4.6.1。

我有一个带有以下构造函数的类,我设置了一个会话变量:

public class MyClass()
{
    private HttpContextBase Context { get; set; }

    public MyClass(HttpContextBase context)
    {
        Context = context;
    }

    public bool CheckForAccess()
    {
        Context.Session["MyVariable"] = "Hello";
        return true;
    }
}

我可以访问会话并将其从我的控制器传递给我的对象,如下所示:

public ActionResult Index()
{
    var myclass= new MyClass(HttpContext);
    var excluded = myclass.CheckForAccess();
}

这很好用。现在我有一个静态类,我需要在MyClass中调用相同的函数:

public static class MyClassExtension
{
    public static bool Check()
    {
   //here's where i'm stuck
    var myclass = new MyClass(I_need_to_pass_the_HttpContextBase_from_here);
        return myclass.CheckForAccess();
    }
}

这就是我被困的地方。我明显地试图访问登录用户的当前会话并在必要时传递它。我从静态类传递给具有HttpContextBase参数的构造函数,以便可以在MyClass对象中使用它?感谢

1 个答案:

答案 0 :(得分:2)

您可以使用HttpContext.Current,但要注意:如果在ASP.NET请求之外调用静态,HttpContext.Current将为null(或者在某些情况下可能为null,具体取决于您的使用方式此):

public static bool Check()
{
    var myclass = new MyClass(new HttpContextWrapper(HttpContext.Current));
    return myclass.CheckForAccess();
}

HttpCOntextWrapper用于包装旧的HttpContext密封类并支持HttpContextBase基类。