在我使用的一个区域中的一个控制器的ASP.NET MVC中:
TempData["Model"] = model;
然后RedirectToAction
将模型传递给另一个区域的另一个控制器。在控制器动作方法中,我立即将数据拉回模型。
我担心如果我部署到网络服务器场,那么TempData
使用会话状态会导致问题,但我不确定在这种情况下我是否可以逃脱它因为我立即拉我传递给动作方法的TempData
中的模型?
答案 0 :(得分:2)
您是正确的,RedirectToAction会向客户端发送一条302消息,其中包含重定向资源的URL。然后,客户端负责为重定向资源创建新请求。无法保证原始服务器将提供此资源。从TempData立即提取请求的事实对这种方法没有任何影响,在某些时候它会出错。
您需要有一些管理会话的方法。您可以配置HTTP session affinity,以便从服务器提供的请求将始终返回到原始服务器。
您可以使用cookies for session state或实施session state provider。
此blog post也是选项概述的良好开端。
答案 1 :(得分:0)
如果您正在使用InProc会话状态,则可能会遇到问题,因为在重定向中您可能会被发送到同一会话将无法使用的另一台服务器。
两种可能的选择是实现cookie based TempData提供程序或切换到另一个session-state mode。请注意,基于cookie的TempData对用户是完全可见的,尽管有些实现可以加密数据。
答案 2 :(得分:0)
尝试使用基于cooke而不是会话tempdata
见以下链接
http://volaresystems.com/Blog/post/2011/06/30/Sessionless-MVC-without-losing-TempData
答案 3 :(得分:0)
避免一起使用TempData。如果您要在重定向中发送模型,请使用类似
的内容RedirectToAction("MyAction", new {model = myModel});
public actionresult MyAction(model model)
{
/// Mode Code
return View(MyView, model);
}
假设您的控制器操作将模型作为参数。