C# 从另一个类在ASP.Net MVC控制器中设置会话

C# 从另一个类在ASP.Net MVC控制器中设置会话,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我正在尝试从另一个控制器访问我的MVC HomeController的方法,以便在用户未经身份验证时将其重定向到主页。问题是,如果我自己实例化了HomeController中的会话,它就不会被设置,但我必须从HomeController访问存储在会话中的变量。我试图通过以下方式解决问题: HomeController currentHomeController = new HomeController(); currentHomeController.Session = this.Session

我正在尝试从另一个控制器访问我的MVC HomeController的方法,以便在用户未经身份验证时将其重定向到主页。问题是,如果我自己实例化了HomeController中的会话,它就不会被设置,但我必须从HomeController访问存储在会话中的变量。我试图通过以下方式解决问题:

HomeController currentHomeController = new HomeController();
currentHomeController.Session = this.Session;
return currentHomeController.Index();
但是Session变量没有setter,因此这不起作用。有没有其他方法可以做到这一点

我的解决方案

这项工作:

 return RedirectToAction("Index", "Home");

谢谢你的回答

您可以通过
Http.Context.Current

在您的其他班级:

var myVar = HttpContext.Current.Session["MyVar"]
如果您需要重定向到另一个操作,只需在您的帐户中执行
RedirectToAction

return RedirectToAction("MyAction", "MyController")

您可以通过
Http.Context.Current

在您的其他班级:

var myVar = HttpContext.Current.Session["MyVar"]
如果您需要重定向到另一个操作,只需在您的帐户中执行
RedirectToAction

return RedirectToAction("MyAction", "MyController")

对于重定向到另一个控制器操作,您不从它创建实例。您使用

TempData["Key"]="lol";
or
Session["key"]="lol";
return RedirectToAction("ActionName", "ControllerName");
对于会话,您可以将您的数据存储在TemData[“key”]或session[“key”]中,并通过另一个类似于

var data=TempData["Key"]; 
Or
var data =Session["key"];

对于重定向到另一个控制器操作,您不从它创建实例。您使用

TempData["Key"]="lol";
or
Session["key"]="lol";
return RedirectToAction("ActionName", "ControllerName");
对于会话,您可以将您的数据存储在TemData[“key”]或session[“key”]中,并通过另一个类似于

var data=TempData["Key"]; 
Or
var data =Session["key"];

控制器的会话对象由框架预先填充。它们都指向同一个会话对象,因此您可以直接使用它而无需设置它

在控制器1中

this.Session["MyText"] = "hello from Controller1";
然后在控制器2中

model.MyText = this.Session["MyText"] as string;

这是在请求之间传递数据的典型方式

控制器的会话对象由框架预先填充。它们都指向同一个会话对象,因此您可以直接使用它而无需设置它

在控制器1中

this.Session["MyText"] = "hello from Controller1";
然后在控制器2中

model.MyText = this.Session["MyText"] as string;

这是在请求之间传递数据的一种典型方式

在web上已找到此解决方案,但HttpContext在我的解决方案中没有属性“Current”。我正在使用ASP.Net MVC 5。@PhilippEger您是在web项目中还是在其他库中执行此操作?旧的ASP.Net web表单“当前”静态访问HTTP上下文的方式在ASP.Net MVC中通常不使用。所有不同的上下文项都由操作调用程序注入控制器实例。在web中已找到此解决方案,但HttpContext在我的解决方案中没有属性“Current”。我正在使用ASP.Net MVC 5。@PhilippEger您是在web项目中还是在其他库中执行此操作?旧的ASP.Net web表单“当前”静态访问HTTP上下文的方式在ASP.Net MVC中通常不使用。所有不同的上下文项都由操作调用程序注入控制器实例。您不能像这样创建自己的控制器实例,这就是导致所有问题的原因。ASP.NET框架创建控制器的实例。如果您想重用动作方法,通常的方法是将客户端重定向到您想要的动作方法,如下所示:您不能像这样创建自己的控制器实例,这就是导致所有问题的原因。ASP.NET框架创建控制器的实例。如果要重复使用操作方法,通常的方法是将客户端重定向到所需的操作方法,如下所示: