Asp.net mvc ASP.NET MVC中两个异步请求之间共享数据

Asp.net mvc ASP.NET MVC中两个异步请求之间共享数据,asp.net-mvc,Asp.net Mvc,我想在服务器的两个异步请求之间共享数据 当某个会话变量值在第一个请求中更改(该值不断更改)时,我希望在第二个请求中更新该值 我应该怎么做?如果请求是同一会话的一部分,只需在HttpContext上使用该会话即可。如果没有,则将变量存储在应用程序上下文中,并从应用程序上下文中更新/使用它。由于浏览器可能正在缓存结果,因此您只能反复查看第一个结果,尤其是在使用HTTP GET而不是POST时。要避免此情况,请将此属性应用于“进度条”操作: 此外,除非“进度条”操作在对会话具有只读访问权限的控制器上执

我想在服务器的两个异步请求之间共享数据

当某个会话变量值在第一个请求中更改(该值不断更改)时,我希望在第二个请求中更新该值


我应该怎么做?

如果请求是同一会话的一部分,只需在HttpContext上使用该会话即可。如果没有,则将变量存储在应用程序上下文中,并从应用程序上下文中更新/使用它。

由于浏览器可能正在缓存结果,因此您只能反复查看第一个结果,尤其是在使用HTTP GET而不是POST时。要避免此情况,请将此属性应用于“进度条”操作:

此外,除非“进度条”操作在对会话具有只读访问权限的控制器上执行,否则它将被迫等待异步操作完成。看见这意味着您需要将进度条操作拆分为应用了此属性的单独控制器:

[SessionState(SessionStateBehavior.ReadOnly)]
总之,进度条操作需要如下所示:

[SessionState(SessionStateBehavior.ReadOnly)]
public class ProgressBarController : Controller
{
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public ActionResult ProgressBar()
    {
        var progress = Session["progress"];
        return Json(progress, JsonRequestBehavior.AllowGet);
    }
}

Tvanfosson如果我将值存储在会话中,并在第一个请求中初始化会话,然后随着值的更改而更改,则第二个请求仅获取分配的会话值first@munish-可能是第二个请求在第一个请求实际更改值之前启动。尝试将会话访问权放在关键部分内(对每个会话锁定对象使用
lock
),以便确保如果第一个请求首先到达关键部分,则第二个请求在第一个完成更新之前不会获得访问权。此外,请确保他们正在使用相同的会话。如果没有经过身份验证,您可能需要设置一个cookie来保持会话的粘性。Tvanfosson,我的实际要求是在mvc.net中,我向服务器发出第一个异步请求,这需要花费很多时间,这就是为什么我想在页面上添加一些进度条。为此,我提出了第二个asyn请求,以获取更改后的值,以便可以更改进度条的值。这就是为什么我添加了session变量,并在保存过程中不断更改值。我想使用我的第二个异步请求获得这个更改后的值。@munish-浏览器(或服务器)是否可能正在为请求返回缓存结果?尝试向请求添加时间戳参数,使其每次都不同,并确保在服务器操作上关闭了缓存。
[SessionState(SessionStateBehavior.ReadOnly)]
public class ProgressBarController : Controller
{
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public ActionResult ProgressBar()
    {
        var progress = Session["progress"];
        return Json(progress, JsonRequestBehavior.AllowGet);
    }
}