从静态访问 HttpContextBase 对象 class

Access HttpContextBase object from static class

ASP.NET 4.6.1 使用 MVC 5.

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

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();
}

这工作正常。现在我有一个静态 class,我需要在 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 参数从我的静态 class 传递给构造函数以便它可以在 MyClass 对象中使用?谢谢

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

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

HttpCContextWrapper 的存在是为了包装旧的 HttpContext sealed class 并支持 HttpContextBase base class.