2013-05-06 4 views
5

Meine Website wirft die folgenden Ausnahmen jeden Tag und ich konnte die Lösung nicht finden. Ich habe nur wenig im Web recherchiert und das ist was ich bisher mache. Das Hinzufügen der Option aspx nach unten löst das Problem nicht.System.Web.UI.ViewStateException, ungültiger Viewstate

ValidateRequest = "false" EnableEventValidation = "false" ViewStateEncryptionMode = "Nie" EnableViewStateMac = "false"

Auch meine Referral URL ist die korrekte URL und ich habe keine Ahnung, wie es umleiten mit zwei (gleichen) Parametern. Es gibt keinen solchen Link auf meiner Empfehlungsseite. Bitte helfen Sie.

FEHLERPROTOKOLL

URL : http://www.abcd.com/company-details.aspx?com=asia-pacific-pte-ltd&com=asia-pacific-pte-ltd 

referral URL : http://www.abcd.com/companies/asia-pacific-pte-ltd/ 

Inner Exception Type: System.Web.UI.ViewStateException 

Inner Exception: Invalid viewstate. Client IP: 192.162.19.193 Port: 1966 User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; MRA 6.0 (build 6001)) Presto/2.12.388 Version/12.11 ViewState: /wEPDwULLTEyMTAyMTY3NDAPZBYCAgMPZBYOZg8QDxYGHg1EYXRhVGV4dEZpZWxkBQdDb3VudHJ5Hg5EYXRhVmFsdWVGaWVsZAUNQ2xlYW5fQ291bnRyeR4LXyFEYXRhQm91bmRnZBAVCgNBbGwFQ2hpbmEJSG9uZyBLb25nBUluZGlhCUluZG9uZXNpYQhNYWxheXNpYQtQaGlsaXBwaW5lcwlTaW5nYXBvcmUIVGhhaWxhbmQHVmlldG5hbRUKA0FsbAVjaGluYQlob25nLWtvbmcFaW5kaWEJaW5kb25lc2lhCG1hbGF5c2lhC3BoaWxpcHBpbmVzCXNpbmdhcG9yZQh0aGFpbGFuZAd2aWV0bmFtFCsDCmdnZ2dnZ2dnZ2dkZAIBDxAPFgYfAAUISW5kdXN0cnkfAQUOQ2xlYW5fSW5kdXN0cnkfAmdkEBXFAgNBbGwSQWR2YW5jZWQgTWF0ZXJpYWxzC0FkdmVydGlzaW5nCkFlc3RoZXRpY3MLQWdyaWN1bHR1cmUkQWdyaWN1bHR1cmUgLSBBZ3JpY3VsdHVyYWwgTWFjaGluZXJ5G0FncmljdWx0dXJlICYgRm9vZCBQcm9kdWN0cxBBaXItY29uZGl0aW9uaW5nHUFpci1maWx0cmF0aW9uICYgUHVyaWZpY2F0aW9uB0FpcnBvcnQJQWx1bWluaXVtFEFuYWx5dGljYWwgRXF1aXBtZW50GkFuYWx5dGljYWwgSW5zdHJ1bWVudGF0aW9uFUFuYWx5dGljYWwgVGVjaG5vbG9neRZBbmQgSW50ZXJpb3IgRGVzaWduZXJzEUFuaW1hbCBQcm9kdWN0aW9uCEFudGlib2R5KUFwc... 

Inner Source: 

Exception Type: System.Web.HttpException 

Exception: The state information is invalid for this page and might be corrupted. 

Stack Trace: at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at System.Web.UI.HiddenFieldPageStatePersister.Load() at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() at System.Web.UI.Page.LoadAllState() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP.exhibition_details_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\0f461847\442b0502\App_Web_bfjqxdef.20.cs:line 0 at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

UPDATE i haben die Fehler behoben, indem die Viewstate von unten Link Komprimieren http://www.codeproject.com/Articles/14733/ViewState-Compression

und fixiert, die unwirksame Länge für eine Basis-64-Zeichen-Array Fehler durch Ersetzen die ursprüngliche Methode damit.

protected override object LoadPageStateFromPersistenceMedium() 
    { 
     string viewState = Request.Form["__VSTATE"]; 
     viewState = viewState.Replace(" ", "+"); 

     int mod4 = viewState.Length % 4; 
     if (mod4 > 0) 
     { 
      viewState += new string('=', 4 - mod4); 
     } 
     byte[] bytes = Convert.FromBase64String(viewState); 
     bytes = Compressor.Decompress(bytes); 
     LosFormatter formatter = new LosFormatter(); 
     return formatter.Deserialize(Convert.ToBase64String(bytes)); 
    } 

Danke an alle für die Hilfe :)

Antwort

3

Ich bedaure, dass das sagen, aber Ihre Website hat nichts, und Sie müssen Ihre EventValidations so schnell wie möglich wieder aktivieren.

Was Sie sehen, ist an attempt to hack your site durch Senden vieler Test numbers with your ViewState trying to find your hash key.

Die IP you give have a big list of activity the last few days.

Nun, Alternative, was diesen Fehler verursachen kann, ist das Brechen des ViewState. Sie können compress it and split it wenn Sie ViewState zu groß haben. Sie können auch disable all the controls that not needed. Sie können auch eine log to see from inside what's is going on right on a base page hinzufügen.

+1

Ich entfernte diese EnableEventValidation = "false" ViewStateEncryptionMode = "Nie" EnableViewStateMac = "false" und komprimierte es von dem Link, den Sie mir gaben und es das Problem gelöst. Vielen Dank :) – bluebird

+0

Ich bekomme diese Fehler jetzt, ungültige Länge für eine Base-64 Char-Array. Hilfe – bluebird

+0

@ user597729 Wenn Sie es nur auf dem Protokoll sehen, überprüfen Sie die IP, wie ich Ihnen sagen, es ist wahrscheinlich ein Hack Versuch und Sie brauchen sich keine Sorgen zu machen. Wenn Sie es als Benutzer sehen ... dann ist vielleicht ein Problem. – Aristos

0

ja funktioniert es für mich auch

hier in VBNET

Compressor.vb

Imports System.IO 
Imports System.IO.Compression 
Public Class Compressor 

Public Shared Function Compress(ByVal data() As Byte) As Byte() 
    Dim output As MemoryStream = New MemoryStream 
    Dim gzip As GZipStream = New GZipStream(output, CompressionMode.Compress, True) 
    gzip.Write(data, 0, data.Length) 
    gzip.Close() 
    Return output.ToArray 
End Function 

Public Shared Function Decompress(ByVal data() As Byte) As Byte() 
    Dim input As MemoryStream = New MemoryStream 
    input.Write(data, 0, data.Length) 
    input.Position = 0 
    Dim gzip As GZipStream = New GZipStream(input, CompressionMode.Decompress, True) 
    Dim output As MemoryStream = New MemoryStream 
    Dim buff() As Byte = New Byte((64) - 1) {} 
    Dim read As Integer = -1 
    read = gzip.Read(buff, 0, buff.Length) 

    While (read > 0) 
     output.Write(buff, 0, read) 
     read = gzip.Read(buff, 0, buff.Length) 

    End While 

    gzip.Close() 
    Return output.ToArray 
End Function 
End Class 

und das Einfügen von innen default.aspx es

Imports System.IO muss

Protected Overrides Function LoadPageStateFromPersistenceMedium() As Object 
    Dim viewState As String = Request.Form("__VSTATE") 
    Dim bytes() As Byte = Convert.FromBase64String(viewState) 
    bytes = Compressor.Decompress(bytes) 
    Dim formatter As LosFormatter = New LosFormatter 
    Return formatter.Deserialize(Convert.ToBase64String(bytes)) 
End Function 

Protected Overrides Sub SavePageStateToPersistenceMedium(ByVal viewState As Object) 
    Dim formatter As LosFormatter = New LosFormatter 
    Dim writer As StringWriter = New StringWriter 
    formatter.Serialize(writer, viewState) 
    Dim viewStateString As String = writer.ToString 
    Dim bytes() As Byte = Convert.FromBase64String(viewStateString) 
    bytes = Compressor.Compress(bytes) 
    ClientScript.RegisterHiddenField("__VSTATE", Convert.ToBase64String(bytes)) 
End Sub