日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

验证视图状态MAC失败问题正确的解决办法

發布時間:2025/3/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 验证视图状态MAC失败问题正确的解决办法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天做了個首頁登陸的頁面,是用Request.Form接收參數的
然后又做了個測試頁面test.aspx,代碼如下:
<body>
??? <form id="form1" runat="server" method="post" action="Default.aspx">
??? <div>
??????? <input type="text" runat="server" id="Solution" value="(Local)" />
??????? <input type="text" runat="server" id="UserName" value="ricky" />
??????? <input type="text" runat="server" id="Password" value="111" />
??????? <input type="submit" runat="server" />
??? </div>
??? </form>
</body>
但是測試的時候發現test頁面始終post到他自己
去掉runat標記則可以post到default.aspx,但去不到值
后來在IE里面查看源代碼,發現html是這個樣子的<form id="form1" method="post"?action="test.aspx">
也就是說生成的html里始終是post到自己的
知道問題就好辦了
修改代碼:
<form id="form1" runat="server" method="post"?οnsubmit="this.action='Default.aspx'">
一切OK,post到default.aspx了
然后又報錯了
驗證視圖狀態 MAC 失敗。如果此應用程序由網絡場或群集承載,請確保 <machineKey> 配置指定了相同的 validationKey 和驗證算法。不能在群集中使用 AutoGenerate
去網上搜了搜,說問題的原因是asp.net的runat='server' 會對ViewStat進行MAC的加密,解決辦法基本上就2個:
1:修改當前頁面的@page屬性,添加enableEventValidation="false"?viewStateEncryptionMode="Never"
或者在web.config里添加<pages?enableEventValidation="false"?viewStateEncryptionMode="Never"?/>
2:在web.config里指定validationKey和驗證算法
<machineKey?validation="3DES"?validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211"?decryption="3DES" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" />
可是實際試下來發現沒用,問題依舊
查了查資料發現加上實際測試,終于發現了真正的解決辦法
修改當前頁面的@page屬性,添加enableEventValidation="false"?enableViewStateMac="false"
或者在web.config里添加<pages?enableEventValidation="false"?enableViewStateMac="false"?/>

原文地址:http://www.cnblogs.com/sephil/archive/2007/10/19/asp_net_post.html

(PS: 我發現如果是寫在頁面標記里,當前頁和POST的目的頁都需要寫)

如果你的Asp.Net程序執行時碰到這種錯誤:“驗證視圖狀態?MAC?失敗。如果此應用程序由網絡場或群集承載,請確保?<machineKey>?配置指定了相同的?validationKey?和驗證算法。不能在群集中使用?AutoGenerate。”那么說明你沒有讓你的應用程序使用統一的machineKey,那么machineKey的作用是什么呢?按照MSDN的標準說法:“對密鑰進行配置,以便將其用于對 Forms 身份驗證 Cookie 數據和視圖狀態數據進行加密和解密,并將其用于對進程外會話狀態標識進行驗證。”也就是說Asp.Net的很多加密,都是依賴于machineKey里面的值,例如Forms 身份驗證 Cookie、ViewState的加密。默認情況下,Asp.Net的配置是自己動態生成,如果單臺服務器當然沒問題,但是如果多臺服務器負載均衡,machineKey還采用動態生成的方式,每臺服務器上的machinekey值不一致,就導致加密出來的結果也不一致,不能共享驗證和ViewState,所以對于多臺服務器負載均衡的情況,一定要在每臺站點配置相同的machineKey。

machineKey生成的算法:

validationKey = CreateKey(20);

decryptionKey = 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();

???? }

附參考的matchineKey配置:

<?xml version="1.0"?>

<configuration>

? <system.web>

??? <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>

???? </system.web>

</configuration>

轉載于:https://www.cnblogs.com/easypass/archive/2009/12/08/1619127.html

總結

以上是生活随笔為你收集整理的验证视图状态MAC失败问题正确的解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。