ASP.Net MVC - TempData会话问题

时间:2011-02-08 13:01:22

标签: asp.net asp.net-mvc

我们使用的WebFarm不支持​​Session。我们需要在重定向期间传递数据。如何在没有TempData字典的情况下执行此操作,因为TempData使用了Session。

3 个答案:

答案 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();