【发布时间】: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中提取,所以变量为空。
标签: c# asp.net-mvc azure tempdata