asp.net - 在重定向中使用 Asp.Net MVC TempData 时是否可能出现 "race condition"?

标签 asp.net asp.net-mvc redirect tempdata

使用 TempData 时,我的理解是它只会为一个请求保留您放入的任何内容。因此,当使用 TempData 在重定向中保留数据时(为了使用 Post-Request-Get 模式),是否有可能在发送重定向的响应和用户的浏览器请求重定向到页面?在这种情况下,get 将不再有 TempData 可用,对吗?

现在,我知道发生这样的事情是非常罕见的,但考虑到用户可能在另一个选项卡中打开了另一个页面,并且该页面上可能发生了 ajax 或定时回调请求,它突然没有对我来说似乎是不可能的。只是通常认为担心太遥远,还是我误解了什么?

编辑:更具体地说明我所询问的场景。

  • 在 Tab 1 中,用户浏览到一个页面
    用post表单
  • 在 Tab 2 中,用户浏览到网站上的另一个页面
    计时器上的 ajax 回调
  • 在选项卡 1 中,用户将表单发布到服务器
  • 当服务器收到post时,它会在TempData中保存一些数据
    并发回重定向响应
  • 在选项卡 2 中,定时 ajax 回调发生,向服务器发送 GET 请求。 TempData 从 session 中删除
  • 在选项卡 1 中,浏览器接收重定向并发出 GET 请求
  • 服务器处理 GET 请求并查找 TempData,但它不再存在
  • 最佳答案

    好吧,浏览 ASP.NET MVC 代码表明,虽然 TempData 存储在 session 中,但在加载时会从 session 中删除。它被加载到 Controller 的 ExecuteCore() 方法中。

    所以我认为这意味着是的,你完全可能会遇到竞争条件,来自不同浏览器选项卡的请求(你有一个很好的例子)可能会导致这个问题。但这取决于每个浏览器处理请求的模型。浏览器可能会将所有请求序列化到同一服务器,以便一次只执行一个。实际上,他们不会这样做,但他们会将其限制在最大值,即(我认为)对同一服务器的 5 个并发请求。

    鉴于 ASP.NET MVC 站点可以是对任何浏览器的服务请求(毕竟它是 Web :)),这是一个真实的场景,尽管可能很罕见,正如您所说。

    关于asp.net - 在重定向中使用 Asp.Net MVC TempData 时是否可能出现 "race condition"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/235665/

    相关文章:

    带有 HTTP304 状态代码的 ASP.NET MVC2 浏览器缓存

    javascript - asp.net mvc 6 web api + Angular 资源帖子数组作为对象属性

    ASP.NET MVC 2 - ViewModel 前缀

    bash - 双重重定向测试

    http - http.StatusFound 是否是点击重定向的正确状态?

    javascript - 自动将版本添加到 asp.net header runat ="server"内的 js 文件

    c# - ASP.NET + C# 多项目解决方案。我应该在哪里放置我的全局效用函数?

    asp.net - 如何授予身份 ApplicationPoolIdentity 读取我站点内文件夹的权限

    javascript - asp.net mvc 3从 Controller 操作调用javascript

    google-chrome - 如何强制 Chrome 不缓存重定向?