2012-09-26 5 views
1
public ActionResult Index() 
{ 
    TempData["msg"] = "Test"; 
    return RedirectToAction("About"); 
} 

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

간단한 질문입니다. 나는 그것에 대한 해답을 볼 때 내 이마를 때 리라 확신한다.TempData 및 Fiddler

브라우저에서 색인 작업으로 이동하면 정보 작업으로 리디렉션되고 TempData 값이 정확합니다.

피들러 작성기를 사용하여 색인 작업으로 이동하면 정보 작업으로 리디렉션되지만 TempData 값은 손실되고 null이됩니까?

답변

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

난 당신이 브라우저에서 실행할 때 세션 ID가 동일 함을 참조하십시오. 피들러 작곡가에서 달리면 그들은 다릅니다.

따라서 TempData는 기본 TempDataProvider (세션 상태의 TempData를 저장)를 사용하여 재설정됩니다.

0

요청이 결과와 동일하면 동일해야합니다. 대부분 가짜를 작성할 때 첫 번째 요청의 정확한 사본을 만들지는 않을 것입니다. tempData의 경우 작성된 ​​요청은이 데이터가있는 첫 번째 요청 인 경우에만 작동합니다 (tempData 가져 오기). 응용 프로그램에서 아직 보내지 않은 요청의 "복사본"을 만들어야하므로, tempData를 사용합니다.

임시 데이터는 세션 상태에 저장되고 첫 번째 요청 후에 지워지므로 올바르게 보내지 않은 경우 올바르지 않거나 누락 될 수 있습니다. Fiddler 작곡가를 통해 OR (자신의 경우와 같이) 만들기 두 번째 요청은 동일한 정보와 함께 동일한 컨트롤러에 전달됩니다.

같은 주제의 다른 related questions도 참조하십시오.