使用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对象中使用它?感谢
答案 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基类。