【问题标题】:TempData and FiddlerTempData 和提琴手
【发布时间】:2012-09-26 20:18:37
【问题描述】:
public ActionResult Index()
{
    TempData["msg"] = "Test";
    return RedirectToAction("About");
}

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

一个简单的问题。看到答案我肯定会拍自己的额头。

在浏览器中导航到 Index 操作会导致重定向到 About 操作,并且 TempData 值是正确的。

为什么当我使用 Fiddler 作曲家导航到 Index 操作时,它会导致重定向到 About 操作,但 TempData 值丢失并为空?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多