【发布时间】:2018-02-15 20:05:52
【问题描述】:
我们的主要项目 MVC 5。我一直使用 Session 对象没有问题。但在一个案例中,我遇到了一个问题。通常,我们使用 4 个主会话密钥。这很好用。在控制器级别过滤器分配的键。
最近我们开发了一些东西,应该是跨应用程序和特定于会话的共享数据。因此,我将值分配给会话,我可以看到并使用控制器的相同操作。但是有一个问题,比如我刷新页面或者点击某个东西触发了一个动作,我的session key不存在。
我们正在使用 InProc 和 Session timeout 60。此外,其他会话密钥没有问题。即使在刷新页面后也会出现问题。
这种用法有什么问题?
/// Index of some controller
public virtual ActionResult Index(string key)
{
if(InquiryId == 1){
var result = RequestClient("...");
InquiryId = result.Id;
}
...
}
在基本控制器中它的相关部分;
public int InquiryId
{
get
{
if (Session["InquiryId"] != null)
{
return (int)Session["InquiryId"];
}
return 1;
}
protected set
{
_inquiryId = value;
HttpContext.Session.Add("InquiryId", value);
}
}
【问题讨论】:
-
尝试使用TempData或ViewBag,ViewData代替Session
-
感谢您的建议。但我不需要那个 id。我需要后端工作什么的。
-
好的,但是你可以使用 TempData
-
但是由于浏览器上的重定向和后退/前进功能等其他原因,tempdata 可以为空。我们已经尝试过,但一无所获。 Session 对象有奇怪的行为,我们正在尝试找出原因?
-
您可以尝试在索引操作的第一行设置键吗? RequestClient 的结果正确吗?
标签: asp.net .net asp.net-mvc session