c# - 随机无效 View 状态错误

标签 c# asp.net webforms .net-4.5

我知道有很多关于这个主题的问题,我已经全部阅读了。

我正在使用 IIS8、.Net 4.5。

用户随机收到无效的 View 状态错误,我无法弄清楚。一旦发生这种情况,他们返回网站的唯一方法就是清除浏览器缓存。

在我的 web.config 中我有:

<system.web>
<machineKey validationKey='....key here'   decryptionKey='....decrypt key is valid here'   validation='SHA1'/>
    <!--<hostingEnvironment shadowCopyBinAssemblies="false" />-->
    <authentication mode="None" />
    <compilation targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />
...
</system.web>

我在虚拟专用服务器上运行,但我还没有找到大于 9kb 的 View 状态。

我的应用程序池设置为每天凌晨 3:00 重新启动一次。

我的页面使用了更新面板,也许用户正在点击“后退”?但我已经看到它只是访问页面而没有点击返回。

我注意到的一件事是我有 3 个不同的站点使用相同的应用程序池身份,但应用程序池是分开的。 machine.xml 中没有机器 key ,只有在我的 web.config 中。

最佳答案

调查的几种可能性:

  1. 更新面板会更改表单字段值(用于计算 ViewState 的值),然后页面会被 POST 回服务器,新值会导致验证失败。参见 this post

  2. 您启用了缓存(执行 HTTP header 的跟踪 - 确保您没有打开开发工具)这导致生成无效的 ViewState w/UpdatePanel 搞砸了。

    <
  3. 您是否在任何地方使用 Server.Execute? (请参阅上面的链接)

  4. (不太可能)您的“虚拟专用服务器”是否已迁移到不同的硬件(可能在您不知情的情况下)?

关于c# - 随机无效 View 状态错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006400/

相关文章:

c# - 给定开始日期如何根据闰年找到有 365 或 366 天的结束日期

c# - 如何在文本框 C# 中显示组合框选择的值?

c# - 使用现有的数据库名称验证实现 OWIN?

asp.net - 在 asp.net 页面中包含脚本的正确方法

c# - 让 POST 或 PUT 在 WCF REST 服务中工作

c# - Entity Framework 6 : Insert or Update

javascript - 使用 javascript 禁用验证器控制的最佳方法

javascript - 强制关闭网页

asp.net - 从 Excel 电子表格复制并粘贴到 ASP.NET 控件

c# - Runat ="server"在当前上下文中不存在