【发布时间】:2015-03-25 02:23:41
【问题描述】:
我可以使用HttpContext.ApplicationInstance.Context 类来使用Session 函数存储会话数据吗?
还是有更好的方法来做到这一点?
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-mvc-5
我可以使用HttpContext.ApplicationInstance.Context 类来使用Session 函数存储会话数据吗?
还是有更好的方法来做到这一点?
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-mvc-5
通常会话可作为控制器操作中的属性使用:
public ActionResult Index()
{
this.Session["foo"] = "bar";
return View();
}
由于Session 属性是HttpSessionStateBase 类型,它可以更容易地在单元测试中模拟。请永远不要使用静态 HttpContext.Current.Session,因为您可能会在其他地方看到建议。
如果您不在控制器操作中,并且您有一个 HttpContextBase 的实例(几乎在 MVC 管道的每个部分中),则可以使用其 Session 属性访问该会话。
【讨论】:
Session 属性而不是HttpContext.Current.Session?我快速搜索了一下差异,我得到了this
是的,您可以使用HttpContext 将数据应用到会话。不过,您应该警惕此类实现,Model View Controller 本质上是 stateless。会话虽然会规定某种形式的状态。
您必须考虑到这一点,否则如果不考虑它们,您可能会引入大量孤立的会话变量。根据您的应用程序,这可能会迅速占用您环境中的内存。
如果应用程序很小,您可以在 Controller 中使用以下内容轻松完成:
HttpContext.Current.Session.Add("Title", "Data");
【讨论】: