viewstate MAC的Asp.net验证失败
我在asp.net网站上的某些时间收到以下错误viewstate MAC的Asp.net验证失败,asp.net,viewstate,machinekey,Asp.net,Viewstate,Machinekey,我在asp.net网站上的某些时间收到以下错误 Sys.WebForms.PageRequestManagerServerErrorException: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validatio
Sys.WebForms.PageRequestManagerServerErrorException:
Validation of viewstate MAC failed.
If this application is hosted by a Web Farm or cluster,
ensure that <machineKey> configuration specifies the
same validationKey and validation algorithm.
AutoGenerate cannot be used in a cluster.
Sys.WebForms.PageRequestManagerServerErrorException:
viewstate MAC验证失败。
如果此应用程序由Web场或群集托管,
确保配置指定了
相同的validationKey和验证算法。
无法在群集中使用自动生成。
页面刷新时,没有问题。如何解决此问题?如果使用web场并在多台计算机上运行同一应用程序,则需要在machine.config文件中明确定义机器密钥:
<machineKey validationKey="JFDSGOIEURTJKTREKOIRUWTKLRJTKUROIUFLKSIOSUGOIFDS..." decryptionKey="KAJDFOIAUOILKER534095U43098435H43OI5098479854" validation="SHA1" />
把它放在
标签下
无法使用机器代码的自动生成。要生成自己的machineKey,请参阅以下powershell脚本:
将网站发布到服务器后,通常会显示此错误消息 主要问题在于您用于网站的应用程序池 在与您的网站相关的应用程序池的“常规”部分下,配置您的网站以使用正确的.NET Framework版本(即v4.0) 在流程模型下,将标识值设置为网络服务 关闭对话框,右键单击网站并选择高级设置。。。从内容菜单的管理网站选项。在对话框的“常规”部分下,确保选择了要使用的应用程序池的正确名称 你的网站现在应该运行没有任何问题
希望这有助于您克服此错误。在多服务器环境中,当会话过期且应用程序的另一个实例使用相同的会话id和计算机密钥在不同的服务器上重新启动时,可能会发生此错误。首先,每台服务器都会生成自己的机器密钥,该密钥随后与应用程序的单个实例关联。当会话过期且当前服务器繁忙时,应用程序会像通过负载平衡器一样重定向到更易操作的服务器。在我的情况下,我从多个服务器运行相同的应用程序,错误消息:
viewstate MAC验证失败。如果此应用程序由 Web场或群集,请确保配置指定 相同的validationKey和验证算法 在web.config中定义下的机器代码可以解决此问题。 但不要使用第三方站点生成可能已损坏的代码,请从命令行运行此命令: 基于microsoft解决方案1a 您的密钥看起来像:
对于ASP.NET 2.0和3.5
你的钥匙看起来像:
什么对我有用
…MachineKey
validationKey=“0EF6C03C11FC…63EAE6A00F0B6B35DD4B”decryptionKey=“2F5E2FD80991C629…3ACA674CD3B5F068” validation=“SHA1”decryption=“AES”/>
部分解决视图状态消息身份验证代码(MAC)错误 解决方案3b:使用明确的
通过向应用程序的Web.config文件添加显式的
元素,开发人员告诉ASP.NET不要使用自动生成的加密密钥。有关如何生成
元素的说明,请参见附录A
生成MachineKey的最简单方法-Ahmet Mithat Bostanci-2012年7月31日 您可以在Bing中搜索“MachineKey generator”,并使用在线服务。老实说
查看状态MAC验证失败。如果此应用程序由web场或群集托管,请确保
配置指定了相同的validationKey和验证算法。无法在群集中使用自动生成
答复:
微软说
和这里的其他人一样,我将此添加到我的web.config
<System.Web>
<machineKey decryptionKey="ABC123...SUPERLONGKEY...5432JFEI242"
validationKey="XYZ234...SUPERLONGVALIDATIONKEY...FDA"
validation="SHA1" />
</system.web>
但是,我使用IIS作为machineKey生成器,如下所示:
- 如果选择“为每个应用程序生成唯一密钥” 复选框“、IsolateApps”将添加到密钥的末尾。我有 删除这些以使应用程序正常工作。显然,他们不是一部分 钥匙的钥匙
- SHA1是IIS选择的默认加密方法,如果您更改了它,请不要忘记在web.config中更改machineKey上的验证属性。然而,加密方法和算法不断发展,所以请随意编辑 这篇文章介绍了最新的首选加密方法 在笔记里,我会更新的
您不应该再看到viewstate Mac failed错误。同一应用程序池中的每个网站都应该有一个单独的机器密钥,否则此错误将继续。我有此问题,对我来说,答案与此问题的其他答案不同 我有一个有很多客户的申请。我在
global.asax
中捕获应用程序中的所有错误,并向自己发送一封包含错误详细信息的电子邮件。在我发布了新版本的应用程序之后,我开始收到很多viewstate MAC验证失败的错误消息
经过一天的搜索,我意识到我的应用程序中有一个计时器,可以刷新更新面板
Generate-MachineKey
Generate-MachineKey -validation sha1
<System.Web>
<machineKey decryptionKey="ABC123...SUPERLONGKEY...5432JFEI242"
validationKey="XYZ234...SUPERLONGVALIDATIONKEY...FDA"
validation="SHA1" />
</system.web>
<configuration>
<system.web>
<machineKey ... />
</system.web>
</configuration>
aspnet_regiis -ga "IIS APPPOOL\My App Pool"
enableViewStateMac="false"
<base href="/" />
$('input').each(function(ele, indx){
this.value = this.value.toUpperCase();
});
$('input:visible').each(function(ele, indx){
this.value = this.value.toUpperCase();
});
<httpCookies httpOnlyCookies="true" requireSSL="true"/>
<system.web>
<pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode ="Never" />
</system.web>