尝试从 TempData 检索时出错
Posted
技术标签:
【中文标题】尝试从 TempData 检索时出错【英文标题】:Error when trying to retrieve from TempData 【发布时间】:2021-01-24 11:06:20 【问题描述】:我有一个托管在 Azure 中的 C# asp.net MVC 应用程序。并非总是如此,但有时,在部署之后,我会遇到一个奇怪的错误,我认为这是由TempData
引起的。重新启动网站即可解决此问题。
在控制器方法的末尾,我有以下模式:
TempData["sampleData"] = sampleData;
return RedirectToAction("DownloadSampleData"....
然后,在DownloadSampleData
的开头我有:
var sampleData = TempData["sampleData"] as SampleDataDto;
收到的错误是:
Object reference not set to an instance of an object.
它指出的问题是:
var sampleData = TempData["sampleData"] as SampleDataDto;
如果网站重新启动,问题似乎就消失了。每次部署时都不会发生这种情况。
我希望在这里了解更多信息,TempData
是如何发起的?我是否正确假设错误是因为 TempData
在此时不可用,因此导致对象引用错误?
感谢您对可能导致此问题的任何想法,因为我似乎无法通过 Google 搜索找到任何相关内容。
【问题讨论】:
我认为 tempdata 只能在一个连续的请求中访问,如果要保留它需要使用 tempdata.keep 上面的代码确实有效。只是有时,在部署之后,它会在尝试从 TempData 中提取数据时出错。重新启动站点可以修复它。此外,该错误特定于它尝试从中提取数据的行,而不是它尝试使用提取的对象之后的行,这让我认为错误是由于 TempData 本身没有被初始化,或类似的。 Tempdata 在处理后仅保留一个连续的请求。这可能是空引用异常的原因尝试使用 TempData.Keep("sampleData"),并检查它是否再次生成错误,但是当不需要时您需要手动清除它 我可以尝试一下,但是错误非常零星,很难测试。但是,您会不会想到,如果 TempData 中不存在密钥,它不会产生错误?当它尝试使用空对象时,它不会失败并出现同样的错误吗? 例如,如果我删除将sampleData添加到TempData,它会出错,但不在问题中提到的那一行,它会失败,因为没有任何东西可以从名为sampleData的TempData中提取,所以变量为空。 【参考方案1】:希望这是您正在使用的实际代码。请注意,您正在尝试将变量 sampleData
值保存到 TempData["sampleDate"]
并从 sampleData
中检索它。它是完全不同的键,因此会出现空引用错误。
【讨论】:
对不起,我的错字。正如问题所述,重新启动网站可以解决问题。据我所知,这里的代码不是问题,因为它在重新启动后工作得很好。要补充一点,如果您对此进行模拟,则不会在该行上命中空引用,当您尝试在变量上使用某些内容时会命中空引用,即为空。所以我不确定为什么尝试从 TempData 中提取会导致该错误。 看看这里提供的答案,您可以尝试返回视图吗? - ***.com/questions/45356403/… 我真正感到困惑的是,为什么这是部署后的临时问题?为什么重新启动站点会停止它?而且,为什么会在它所在的行返回错误? 您可以尝试返回一次视图吗?然后我们会看看是什么问题。另外,添加行RedirectToAction
的完整代码。以上是关于尝试从 TempData 检索时出错的主要内容,如果未能解决你的问题,请参考以下文章