·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> ASP.Net 验证视图状态 MAC 失败

ASP.Net 验证视图状态 MAC 失败

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

asp.net 验证视图状态 MAC 失败

错误信息

验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。造成原因

如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。”那么说明你没有让你的应用程序使用统一的machineKey。

machineKey用途

Asp.Net的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。

    machineKey生成方式:    string Str = String.Format("<machineKey validation=\"3DES\" validationKey=\"{0}\"  decryptionKey=\"{1}\" decryption=\"3DES\"/>",CreateKey(20),CreateKey(24));     PRotected string CreateKey(int len)      {             byte[] bytes = new byte[len];             new RNGCryptoServiceProvider().GetBytes(bytes);             StringBuilder sb = new StringBuilder();             for(int i = 0; i < bytes.Length; i++)             {                     sb.Append(string.Format("{0:X2}",bytes[i]));             }             return sb.ToString();      } 

  自动生成工具:http://aspnetresources.com/tools/machineKey