2013-05-06 36 views
5

私のウェブサイトは毎日例外を投げており、私は解決策を見つけることができませんでした。 私はウェブでの研究はほとんど行っていませんでしたが、これはこれまでのところです。以下のオプションをaspxに追加しても問題は解決しません。System.Web.UI.ViewStateException、無効なビューステート

のvalidateRequest = "false" をEnableEventValidation = "false" を ViewStateEncryptionMode = "決して" EnableViewStateMacは= "false" を

また、私の紹介URLが正しいURLであり、私はそれがリダイレクトどの見当がつかない2つの(同じ)パラメータで私の紹介ページにそのようなリンクはありません。助けてください。

ERRORログ

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はリンク http://www.codeproject.com/Articles/14733/ViewState-Compression

下方からのViewStateを圧縮することにより、エラーを修正し、置き換えることによりベース64 char配列エラーの無効な長さを固定していますこれを元の方法。

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)); 
    } 

おかげで誰も助け:)

答えて

3

のために私がそれを言うが、あなたのサイトには何もを持っていなかった、とあなたはできるだけ早くあなたのEventValidationsを再度有効にする必要があることを申し訳ありません。

多くのテストをnumbers with your ViewState trying to find your hash keyで送信して、an attempt to hack your siteと表示されています。

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

ここでは、このエラーの原因として、ViewStateが破損している可能性があります。 ViewStateが大きすぎる場合は、compress it and split itにすることができます。 disable all the controls that not neededも可能です。また、log to see from inside what's is going on right on a base pageを追加することもできます。

+1

これらのEnableEventValidation = "false"を削除しました。ViewStateEncryptionMode = "Never" EnableViewStateMac = "false"そして私の与えたリンクから圧縮して問題を解決しました。ありがとう、ありがとう:) – bluebird

+0

私は今このエラーを取得しています、Base-64 char配列の長さが無効です。 help – bluebird

+0

@ user597729ログだけに表示されている場合は、IPをチェックしてください。おそらくハックを試してみると心配する必要はありません。あなたがユーザーとしてそれを見たら...多分その問題。 – Aristos

0

はい、それは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 

あまりにも私の作品、これはあなたはそれが

輸入System.IOを必要とdefault.aspxを の内側に貼り付けます

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 
関連する問題