Validation of viewstate MAC failed after installing .NET 3.5 SP1
After installing .NET 3.5 SP1 you may get Validation of viewstate MAC failed exceptions when doing post backs on ASP.NET pages
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.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: 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.
Stack Trace:
[HttpException (0x80004005): Unable to validate data.] System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength) +289 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +140 [ViewStateException: Invalid viewstate. Client IP: 127.0.0.1 Port: 34562 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; Zune 3.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8) ViewState: /wEPDwUKMTc2NzE0NzA0NmRkmWc0SFS8H55FfURfpUekG2KhS8g= Referer: https://localhost/MySite/Default3.aspx<br> Path: /MySite/Default.aspx] [HttpException (0x80004005): 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.] System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +106 System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState) +14 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +242 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4 System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37 System.Web.UI.HiddenFieldPageStatePersister.Load() +207 System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +105 System.Web.UI.Page.LoadAllState() +43 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +6785 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +242 System.Web.UI.Page.ProcessRequest() +80 System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21 System.Web.UI.Page.ProcessRequest(HttpContext context) +49 ASP.default_aspx.ProcessRequest(HttpContext context) +4 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
Cause:
This will happen if you have specified an action on the forms element, and if the action is different than the page you are browsing to, i.e. in this case the page I am browsing to is Default3.aspx, but the action is set to Default.aspx (as you can see from the Path and Referer in the error message)
<form id="form1" runat="server" action="Default.aspx">
The reason this occurs after installing SP1 for .NET 3.5 is because prior to this service pack, the action attribute was ignored. Now that it is no longer ignored, the post-back will actually post back to the action page, and of course the view state for Default3.aspx will not be valid for Default.aspx.
You’ve heard it before:) this is not a bug, it’s a feature… in this case that’s actually true…
Resolution:
Remove the action attribute, or change it to post to the right page if you want to have viewstate enabled.
Laters,
Tess
Comments
Anonymous
April 14, 2009
PingBack from http://microsoft-sharepoint.simplynetdev.com/validation-of-viewstate-mac-failed-after-installing-net-35-sp1/Anonymous
April 14, 2009
After installing .NET 3.5 SP1 you may get Validation of viewstate MAC failed exceptions when doing postAnonymous
April 14, 2009
With respect solution does not sounds like "solution". what if i want to post data to different page with viewstate enabled..?Anonymous
April 14, 2009
Jacob, If you want to move to a different page you would need to redirect or similar in that case and add the data you want to pass in a query string or cookie. As viewstate is stored in the form (in a hidden form field) and "unpacked" at the beginning of each request, posting viewstate from one page to another will not work. This has not worked before either, i.e. the action attribute has been ignored so if there was an action on the form field that has never worked. The only difference now is that the action attribute is honored. Manual posting (through code) has always given this error, if you post viewstate to another page... This post was meant to explain why you get this exception after installing 3.5 SP1 and what you can do to resolve the exception. I agree that it is not a solution to "I want to post viewstate between pages". However that is something that has never worked, by design. If this is something that is essential to you I would urge you to either send feedback through visual studio (http://msdn.microsoft.com/en-us/library/zzszcehe.aspx) or to open a support case and make a design change request. HTH, TessAnonymous
April 14, 2009
I don't mean to encourage this (because it disables a security feature), but couldn't you use Page.EnableViewStateMac to disable view state MAC validation to work around this behavior? http://msdn.microsoft.com/en-us/library/system.web.ui.page.enableviewstatemac.aspxAnonymous
April 14, 2009
I'm luck, not meet this error yet :)Anonymous
April 19, 2009
I'm no web/app developer but after a "this isn't my job, I shouldn't have to deal with this" rant, I found that if you want to keep viewstate enabled and post to a different page, remove the 'action' attribute from the 'form' tag, and then replace your html 'submit' control with an ASP.net button and set its 'PostBackUrl' property to the page that was previosuly specified in form's 'action' atribute. Hope that I understand the problem correctly and that this helps. Seems less drastic than: enableViewStateMac="false" viewStateEncryptionMode="Never" enableEventValidation="false" ...and so on.Anonymous
April 21, 2009
I ran across this problem recently in dealing with MVC and asp.net/AJAX controls. No matter what I did, I could not get rid of the error. Even looking at the postback URL it looked the same as the referring URL. Of cource since I am using RealTime MSCharts, I needed the viewstate. The way I solved this problem, it to put all AJAX controls in an UpdatePanel. For some reason, the UpdatePanel (which posts back a partial view) posts back to the correct URL with the proper viewstate and voila, error gone!!!Anonymous
April 22, 2009
Thanks for the post, solved it for me.Anonymous
April 23, 2009
this is my solution. I make a POST form, with the values i want. Private Sub PostResponse() Dim _msgResponse As String = String.Empty Dim _fldResponse As String = String.Empty _fldResponse += Me.getHiddenField("Amount", 1230.45) _fldResponse += Me.getHiddenField("Currency", 214) _fldResponse += Me.getHiddenField("AuthCode", "3242424") _fldResponse += Me.getHiddenField("ReferenceCode", "A453453") _msgResponse = String.Format("<form name=t id=t action={0} method=post>{1}</form>", URL, _fldResponse) Response.Clear() Response.Charset = String.Empty Response.ContentType = "text/html" Response.Write(_msgResponse) Response.Write("<script> t.submit(); </script>") Response.End() End Sub Private Function getHiddenField(ByVal campo As String, ByVal valor As String) As String Return String.Format("<input name=""{0}"" type='hidden' value=""{1}"" >", campo, valor) End FunctionAnonymous
April 29, 2009
Would this happen if say i had mypage.aspx and its action were set to mypage.aspx?var= Would the query string cause this to happen? I did have sp1 installed, although this was an .net 2.0 site i also tried unistalling sp1 but still get the error. I have another machine without sp1 on it - code works on there. So i assume the problem is with sp1 - any way to get my server back to the way it was without sp1 on it? Can i reinstall the 2.0 framework to restore it? thanksAnonymous
April 30, 2009
I just recently received this error (unable to reproduce however). It popped up from javascript (I am using Ajax/UpdatePanel) rather than the server throwing the error. Any ideas on how that could be caused? I checked my aspx page (only one of them) and the form tag does not have an action attribute. ThanksAnonymous
April 30, 2009
I just started noticing this problem. It happens if my web page sits idle for 20 minutes or so and then you click on the menu item. The web site is only a one page aspx file so it's not a file name issue as Tess pointed out.Anonymous
May 07, 2009
The comment has been removedAnonymous
May 24, 2009
Thanks for this. Accidentally had a form action that wasn't meant to be there and would never have though to checked. Fixed the problem for me.Anonymous
May 28, 2009
I would also like to know the answer to Ian's question about the query string. I have started to see this as well since sp1.Anonymous
May 28, 2009
not sure why you would want to restore 2.0 rather than just removing the querystring, the querystring wasn't honored before (nor the rest of the action) so removing it or reverting to 2.0 would have the same effect thereAnonymous
June 02, 2009
Excellent!!!! For me it is working..Anonymous
June 18, 2009
I have a vb 2.0 website and SP1 installed for several months and just recently got there error. I have not made any modifications to the production version of my website for over 2 weeks, and it is used daily by several departments. yet the errors just popped up this morning. The other oddity is that if I just try and re navigates to the same page that threw the error and preform the same actions that caused the error in the first place, it works fine the second time. There error is erratic and inconsistent which only makes it harder to fix as i am not sure if it is truly working, or if it just happens to work this time.Anonymous
July 08, 2009
For me it is a content management system I wrote and on their membership page they have a link to PayPal so essentially I have to form tags and each action goes to a different location (thanks to the paypal code). Any ideas?Anonymous
July 13, 2009
Thank you very much indeed. I solved my extremely bad problem by this.Anonymous
July 15, 2009
Thank you very much. It worked for me fine.Anonymous
July 31, 2009
The comment has been removedAnonymous
August 02, 2009
Tess.... You're a Godsend! Thanks very much. PhilAnonymous
September 04, 2009
The comment has been removedAnonymous
September 24, 2009
I am using asp.net mvc frame work and dundas charts. When I click on the "save" command button in the chart I got the "Validation of viewstate MAC failed" error. I have removed the action attribute from form and also make the viewstate diabled. Still I got the error. Please note this error is occuring in windows 2008 server ann IIS 7.0. In win xp and IIS 6, it is working fine. Anybody with same issues? please share ur fix.Anonymous
September 25, 2009
We installed .Net 3.5 and had a similar issue. We get: <form name="form1" method="post" action="<%= LocalURL %>XMLLogin.aspx Whereas before we got: <form name="form1" method="post" action="xmlLogin.aspx My question is, after we uninstalled .Net 3.5 we still get the same behaviour? Does .Net 3.5. make some permanent changes? Can I reverse these for now on my affected servers?Anonymous
September 30, 2009
I have gotten this error when loading pages on a .NET 1.1 asp.net application that was incorrectly configured in IIS as to use the .NET 2.0 framework. Much of the site runs fine, but some pages would return this error. Changing the setting on the vdir/web app in IIS back to 1.1 resolved the issue.Anonymous
October 31, 2009
Excellent! For me it is working.. Thanks! Thanks! Thanks!Anonymous
December 08, 2009
I am facing the same problem Can server.transfer also cause this problem?Anonymous
January 05, 2010
Thank you! Worked perfectly in my case.Anonymous
January 05, 2010
Excellent soultion. Searched far and wide and tried many other solutions. This finally worked. Thanks.Anonymous
January 10, 2010
Im getting the same error but my form tag does not have an action, i have written the code in VB with 'response.redirect("Default.aspx")' at the end of the actions i require.Anonymous
March 18, 2010
Hi Tess, Since you seem to solve stuff,.. perhaps you should look at: http://forums.asp.net/t/955145.aspx And, http://connect.microsoft.com/VisualStudio/feedback/details/101988/validation-of-viewstate-mac-failed-when-posting-too-quickly Seems there is a much bigger problem that is still not fixed.Anonymous
March 18, 2010
Paul, The problem occurs because the hidden fields at the bottom of the page are not posted when the user clicks before the page finishes rendering. The suggestion at the bottom of the connect bug (disabling postbacks before the page is fully rendered) should work. I also posted about this issue a while back here http://blogs.msdn.com/tess/archive/2008/03/17/asp-net-viewstate-error-validation-of-viewstate-mac-failed.aspx and there is a link in there to a more comprehensive post by my colleague Tom on the topic HTH TessAnonymous
March 23, 2010
Tess, I never would have thought of checking this (I didn't write the pages that broke after the upgrade), but it makes perfect sense. Thanks!Anonymous
March 24, 2010
Hi, I have just implemented the code that 'Javier Sanchez' suggested, and that worked fine for me. Thanks. Duane.Anonymous
March 26, 2010
Seems like I have the same issue howie has. I basically have a search form with a few ddls and txt boxes and a button to submit. I have a bunch of pages but only the master page for all of those has the form tag. When letting the session time out then clicking the button the server throws an error: System.Web.HttpException: Validation of viewstate MAC failed..... Not sure why you hadn't replied to howie on his post. Maybe it has to do with having the form tag in the master page??Anonymous
March 28, 2010
Nate, I've been in and out of the office so howies comment probably came in some time when i was out of the office... With a 20 min delay many things could happen, it could be a session timeout (even though i dont think that that should cause this) but 20 mins is also the standard idle time in the health monitoring settings, so if the process is idle for 20 mins it will recycle (unless you have changed this)... That recycle might be causing this if something changes at a recycle... Not sure what it would be off hand though... but might be worthwhile testing removing that setting.Anonymous
April 17, 2010
you are a gift from Allah... thank you very very very much...you solved my catastrophic problem...Anonymous
May 02, 2010
simple but effective solution to copy paste code ;)Anonymous
May 25, 2010
My application is developed using framework 2.0. It was working perfectly fine, but after installing Windows Updates (.net framework 3.5 was included in these updates), my application stopped working. Removing the action attribute worked for me. Thanks a lotAnonymous
September 22, 2010
The reason for this error is validation of Viewstate failing because of different value of key for encryption/decryption across different server on farm. Below link provide good explanation of this error and possible resolution for the same. a2zmenu.com/.../Validation-of-viewstate-MAC-failed.aspxAnonymous
October 31, 2011
This is very helpful thanks! Thanks a lot!