TempData和Fiddler

时间:2012-09-26 20:18:37

标签: c# asp.net-mvc fiddler tempdata

public ActionResult Index()
{
    TempData["msg"] = "Test";
    return RedirectToAction("About");
}

public ActionResult About()
{
    var msg = TempData["msg"];
    return View();
}

一个简单的问题。我确信当我看到它的答案时,我会拍我的额头。

导航到浏览器中的“索引”操作会导致重定向到“关于”操作,并且TempData值正确。

为什么当我使用Fiddler编辑器导航到Index操作时,它会导致重定向到About操作,但TempData值会丢失并且为null?

2 个答案:

答案 0 :(得分:1)

我认为答案可以在这里找到(http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx):

“会话由唯一标识符标识,可以使用SessionID属性读取。当为ASP.NET应用程序启用会话状态时,将检查应用程序中页面的每个请求是否有从此发送的SessionID值。如果没有提供SessionID值,ASP.NET将启动一个新会话,该会话的SessionID值将通过响应发送到浏览器。“

当我将此行添加到每个操作的开头时:

Debug.Write(string.Format("SessionId: {0}\r\n", HttpContext.Session.SessionID));

我看到当你从浏览器运行时,sessionid是相同的。从Fiddler作曲家开始,他们是不同的。

因此,将使用默认的TempDataProvider(将TempData存储在会话状态中)重置TempData。

答案 1 :(得分:0)

如果请求相同,则结果应相同。很可能你在编写假的时候没有制作第一个请求的精确副本。请注意,对于tempData,只有当第一个请求包含此数据时,您的组合请求才会起作用(获取tempData) - 因此您必须对应用程序尚未发送的请求进行“复制”,您无法重放依赖于tempData。

临时数据存储在会话状态中并在第一次请求后被清除,因此如果你没有正确地发送信息,那么它将无效/丢失信息手/通过Fiddler作曲家或(如你的情况)制作第二向同一个控制器请求相同的信息。

另请参阅同一主题的其他related questions