c# - ASP.NET 无法在同一类型变量中转换 session 变量

标签 c# asp.net iis casting

我在尝试将 session 变量转换为它所属的变量类型时遇到了一些“几乎是随机的”错误。 只是为了说清楚:

我有一个类“Elemento”,我只是创建它的一个实例并将它放在我的 session 变量中:

Elemento elem = new Elemento(id, quantity);
list.Add(elem);
context.Session["cart"] = list;

现在我必须恢复我的列表,我尝试使用:

list = (List<Elemento>)context.Session["cart"];

嗯.. 这个“有时”有效,有时无效!我第一次尝试它时它工作得很好,但现在我有“内部服务器错误 500”,并出现此错误:

Impossibile eseguire il cast di [A]System.Collections.Generic.List1[Elemento] a [B]System.Collections.Generic.List1[Elemento]. Il tipo A ha origine da 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' nel contesto 'LoadNeither' nella posizione 'C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'. Il tipo B ha origine da 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' nel contesto 'LoadNeither' nella posizione 'C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'.

翻译它..

Cannot cast [A]System.Collections.Generic.List1[Elemento] to [B]System.Collections.Generic.List1[Elemento]. Type A have origin from 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' with context 'LoadNeither' and position 'C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'. Type B have origin from 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' with context 'LoadNeither' and position 'C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'.

我可以解决这个“一段时间”清空 IIS 缓存..但是当我从 visual studio 构建解决方案时它会再次发生。

我在某些地方读到我可以使用接口(interface)解决这个问题..但是由于我仍在学习如何使用它们我现在不能直接尝试,有一些经过测试的解决方案吗?

编辑: 适用于 krshekhar 解决方案:

list = context.Session["cart"] as List<Elemento>;

谢谢!

最佳答案

我认为这可能是 IIS 内存的问题。您是否尝试重新启动 IIS?使用另一个 IIS 服务器?

我建议使用一些其他方式来存储对象 - 例如 Cookies。

如果您考虑可伸缩性 - Cookie 将为您提供比 session 对象更好的解决方案,因为它们存储在客户端而不是服务器。

祝你好运

关于c# - ASP.NET 无法在同一类型变量中转换 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212732/

相关文章:

c# - ASP.NET MVC/C# - Linq 和散列密码

c# - Application.run(Windows) 与 Application.run()

c# - 忘记密码 : How can I send an email to user in DotNetNuke

c# - IIS/asp.net 中的静态方法和调用堆栈

windows - IIS:如何在 Windows Server 2008 中禁用数据执行保护?

c# - 如何在 C# 中获取斐波那契数列

javascript - 单击单选按钮时显示文本框。我该怎么做呢?

asp.net - .aspx 与 .ashx 主要区别

c# - 列表<对象> 与列表<动态>

tomcat - 两个 tomcat 服务器使用相同的端口,为 iis 重写规则