在ASP.NET MVC中的两个异步请求之间共享数据

时间:2010-08-24 11:34:47

标签: asp.net-mvc

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

当第一个请求中的某个会话变量值发生更改(值连续更改)时,我希望第二个请求中有更新的值。

我应该怎么做?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

此外,除非在具有对Session的只读访问权限的控制器上执行“进度条”操作,否则它将被强制等待,直到异步操作完成。见Andy's answer to "ASP.NET MVC and Ajax, concurrent requests?"。这意味着您需要将进度条操作拆分为应用了此属性的单独控制器:

[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);
    }
}