从静态访问 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.
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.