使用 TempData 时,我的理解是它只会为一个请求保留您放入的任何内容。因此,当使用 TempData 在重定向中保留数据时(为了使用 Post-Request-Get 模式),是否有可能在发送重定向的响应和用户的浏览器请求重定向到页面?在这种情况下,get 将不再有 TempData 可用,对吗?
现在,我知道发生这样的事情是非常罕见的,但考虑到用户可能在另一个选项卡中打开了另一个页面,并且该页面上可能发生了 ajax 或定时回调请求,它突然没有对我来说似乎是不可能的。只是通常认为担心太遥远,还是我误解了什么?
编辑:更具体地说明我所询问的场景。
用post表单
计时器上的 ajax 回调
并发回重定向响应
最佳答案
好吧,浏览 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/