我们使用的WebFarm不支持Session。我们需要在重定向期间传递数据。如何在没有TempData字典的情况下执行此操作,因为TempData使用了Session。
答案 0 :(得分:3)
您可以编写自己的TempData提供程序并将其存储在cookie中。请参阅ASP.NET MVC Store TempData in Cookie或者您可以拥有一个基类控制器,它可以查找隐藏的输入并保护对象/状态,并将其保存到每个http请求中。
请注意,TempData仅在两个控制器操作之间持续存在。
编辑:
您可以使用相同的示例并编写一个序列化到DB ...或...甚至磁盘的提供程序。拍摄,就此而言,您甚至可以为Session填写整个自定义替换。您将创建一个会话工厂类,并通过某个静态集合中的键存储您的自定义会话对象。然后,您可以通过cookie或通过隐藏输入跟踪该会话密钥。
答案 1 :(得分:0)
这是一个非常有用的问题,可以在MVC中了解更多信息。虽然我有一些问题,比如为什么微软假设人们会知道TempData使用会话。
我上传超过4kb的对象时出现问题。为此,我们的架构师建议拆分该对象并将其保存在Cookie中。我使用下面博客中的代码来拆分对象的序列化字符串。
http://lukencode.com/2010/04/21/split-string-into-array-of-chunks/
因此,在SaveTempData方法中拆分cookie并将它们收集到LoadTempData中的单个字符串中。多数民众赞成解决了问题。
但我使用像NVElocity这样的分布式缓存技术总是更好。
答案 2 :(得分:0)
创建一个如下所示的类:
public class GlobalStorage
{
public static Dictionary<string, object> Device = new Dictionary<string, object>();
}
商店:
GlobalStorage.Device.Add("myKey", mydata);
提取:
string mydata = GlobalStorage.Device["myKey"].ToString();