我将应用程序级变量转换为Hashtable时出现此错误;
首先在Global.aspx
文件中,我将Hashtable存储到Application变量中,如下所示:
Hashtable htErrorDescription = new Hashtable();
htErrorDescription.Add("Error 1","General Error");
htErrorDescription.Add("Error 2","Service Error");
context.Application["htErrorDescription"] = htErrorDescription + "";
之后我想从应用程序级变量中获取此Hashtable。
Hashtable htOutput;
htOutput = (Hashtable)context.Application["htErrorDescription"];
我收到此错误。
请帮我解决这个错误, 提前完成。
答案 0 :(得分:4)
当你这样做时:
Application["Application["htErrorDescription"] = htErrorDescription + "";
它正在隐式地将htErrorDescription转换为字符串。你需要摆脱:
+ ""
另外,我认为这甚至不会编译,你是不是错过了一个结束的]
字符,你是否在不使用反斜杠来嵌套引号来逃避它们?
修改强>
我看到你编辑了你的问题,所以你现在需要做的就是删除+ ""
。
答案 1 :(得分:1)
首先,停止使用字符串连接字典,因为这意味着您在应用程序集合中存储的内容是Hashtable.ToString()
的结果,它只是字符串“System.Collections.Hashtable”。
这只是一个漏洞,但是你的大问题是你在应用范围内存储特定操作的错误字典。
考虑两个人(Alice和Bob,只是为了传统)同时访问Web应用程序。 IIS从其请求队列中获取两个请求,指定一个工作线程来处理每个请求,到目前为止一切都很顺利。
Alice的操作检查她的帐户已付清。创建错误表并非如此,我们在描述“帐户未付款”时添加了错误,并将其分配给应用程序范围的变量。
与此同时,Bob的操作正在尝试创建一个商务会议,但他犯了一个错误并将其设置为上个月,所以错误说“你不能在过去创建商务会议”被分配到一个新表错误,并分配给应用程序范围的变量。
这些发生在大致相同的时间,所以它基本上是随机的,现在在错误表中。
Alice现在收到错误消息。也许这是正确的,也许是过去对商务会议的废话,对她来说毫无意义。爱丽丝很有可能向科技抱怨。
同时Bob也会收到错误消息。也许这是正确的,或者当他知道自己有这个事实时,可能会抱怨他没有支付账单。 Bob很有可能在运营网站的公司中抱怨开具发票或直接投诉。这可能比他抱怨科技更糟糕。
如果需要将对象传递给同一Web请求处理的后续部分,请使用HttpContext的Items属性。
答案 2 :(得分:0)
将对象放入Application
,如下所示:
context.Application["htErrorDescription"] = htErrorDescription;