Anasayfa / ASP.NET / Asp.net Validation of viewstate MAC failed

Asp.net Validation of viewstate MAC failed

Asp.net Validation of viewstate MAC failed

Asp.net Validation of viewstate MAC failed hatasının çözümü için aşağıdaki çözüm yolunu uygularsanız hatadan kurtulmuş olacaksınız.Bu hatayla birlikte aşağıdaki hatayıda almanız olasıdır.

Validation of viewstate MAC failed hatası ve çözümü

Sys.WebForms.PageRequestManagerServerErrorException: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

 

Hatanın sebebini anlamak gerekiyor.Asp.net Validation of viewstate MAC failed hatasının birden fazla tekrar edebilecek yada tekil olabilecek hataları aşağıda sıralanmıştır.

1.Öncelikle Asp.Net üzerinde web form kullanımlarında ortaya çıkar.

2.Repeater, Gridview, Datalist ve Detailsview komponentlerini kullanırken bu komponentlerin DataKeyNames özelliği kullanımında ortaya çıkar.

3.Server kaynaklı yavaş cevap ve response durumlarında ortaya çıkar.

4.Eğer büyük veriler çekiyorsanız database üzerinden sorgunuzu optimize etmediğinizden dolayı ortaya çıkar.

5.Yukardaki tüm durumlarda sayfada click eventinda post back kontrolü ile geri dönüş yapamadığından dolayı karşılaşabilirsiniz.

 

HttpException (0x80004005): Validation of viewstate 
MAC failed. If this application is hosted by a Web 
Farm or cluster, ensure that  configuration 
specifies the same validationKey and validation 
algorithm. AutoGenerate cannot be used in a cluster.

Bu durumda Web config üzerinden EnableViewStateMac değerini false olarak değiştirirseniz probleminiz çözülecektir.

Çözümler :

Web config üzerine

<pages enableeventvalidation="false" 
    viewstateencryptionmode="Never">

Tanımlanamasını yapabilirsiniz.Ayrıca

<system.web>     </system.web> içerisinde bulunan <pages…  bölümünü bulup aşağıdaki kodu yapıştırırsanız kesin olarak problem çözülmüş olacaktır.Diğer maddeleride uygulamanıza ekleyerek problemi çözebilirsiniz.

<pages enableEventValidation="false" validateRequest="false" enableViewStateMac="false" >
...

</pages>

2-  Web Form üzerine aşağıdaki tanımlamayı yapınız.

 function enableForm() { 
      document.getElementById("form").disabled = false; 
  } 

  window.onLoad = enableForm();

3- Hidden ve gizli bilgi alanlarını viewstate doğrulaması oluşturarak yeniden post işlemini engelleyerek hatadan render ile kurtulabilirsiniz.

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
  System.IO.StringWriter stringWriter = 
      new System.IO.StringWriter();
  HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
  base.Render(htmlWriter);
  string html = stringWriter.ToString();
  string[] aspnet_formelems = new string[5];
  aspnet_formelems[0] = "__EVENTTARGET";
  aspnet_formelems[1] = "__EVENTARGUMENT";
  aspnet_formelems[2] = "__VIEWSTATE";
  aspnet_formelems[3] = "__EVENTVALIDATION";
  aspnet_formelems[4] = "__VIEWSTATEENCRYPTED";
  foreach (string elem in aspnet_formelems)
  {
    //Response.Write("input type=""hidden"" name=""" & abc.ToString & """")
    int StartPoint = html.IndexOf("<input type=\"hidden\" name=\"" + 
      elem.ToString() + "\"");
    if (StartPoint >= 0)
    {
      //does __VIEWSTATE exist?
      int EndPoint = html.IndexOf("/>", StartPoint) + 2;
      string ViewStateInput = html.Substring(StartPoint, 
        EndPoint - StartPoint);
      html = html.Remove(StartPoint, EndPoint - StartPoint);
      int FormStart = html.IndexOf("<form");
      int EndForm = html.IndexOf(">", FormStart) + 1;
      if (EndForm >= 0)
        html = html.Insert(EndForm, ViewStateInput);
    }
  }

  writer.Write(html);
}

4- Son olarak sunucu tabanlı devamlı bilgi garantisi sağlayamadığınız için mahchine key kullanmalısınız.Web Config üzerinden ;

<machineKey  
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
               AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>

Tanımlaması yaparsanız kesin olarak hatadan kurtulabilirsiniz.

 

Ayrıca Buna Bakabilirsiniz

Maximum request length exceeded Çözüm

Maximum request length exceeded Çözüm Exception Details: System.Web.HttpException: Maximum request length exceeded. Stack Trace: [HttpException …

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir