문제

ASP.NET 에서이 예외의 원인은 무엇입니까? 분명히 ViewState 예외이지만 예외를 던지는 페이지의 오류를 재현 할 수는 없습니다 (버튼 및 탐색 링크가있는 간단한 두 개의 텍스트 상자 양식).

fwiw, 나는 웹 팜을 운영하고 있지 않습니다.

예외

오류 메시지 : 데이터를 검증 할 수 없습니다.

오류 출처 : System.Web

오류 대상 사이트 : 바이트 [] getDecodedData (byte [], byte [], int32, int32, int32 byref)

포스트 데이터

ViewState :

/wepdwullte4ntuyodcymtfkzf96fhxduahi3noamrjyz+cksnb

EventValidation :

/wewbak+8zzhagkohzrcapdf79ecaolch4ymeq2ayv/gi76znhooirybfrwtwyg =

예외 스택 추적

   at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
   at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
   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.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.default_aspx.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

~ 윌리엄 라일리 랜드

도움이 되었습니까?

해결책

이 오류의 가장 큰 원인은 모든 ViewState로드 (사용자가 정지 또는 뒤로 버튼을 누르기 전에 포스트 백이 중지 될 때)입니다. ViewState가 유효성을 검사하고 오류를 던지지 않습니다.

기타 잠재적 원인 :

  • ViewState가 생성 된 시간과 사용자가 서버에 다시 게시하는 시간 사이에 응용 프로그램 풀이 재활용됩니다 (가능성은 거의 없습니다).
  • 기계 키가 동기화되지 않은 웹 팜 (문제가 아님).

업데이트: 이 문제에 관한 Microsoft 기사. 위의 것 외에도 두 가지 다른 잠재적 원인을 제안합니다.

  • 방화벽/안티 바이러스 소프트웨어에 의한 Viewstate 수정
  • 한 ASPX 페이지에서 다른 페이지로 게시합니다.

다른 팁

.NET 3.5 SP1에서 renderAllHiddenFieldSattOpofofforfform 속성은 이끼 구성 구성에 추가되었습니다.

web.config

<configuration>

    <system.web>

        <pages renderAllHiddenFieldsAtTopOfForm="true"></pages>

    </system.web>

</configuration>

흥미롭게도, 이것의 기본값은 사실입니다. 따라서 본질적으로 .NET 3.5 SP1을 사용하는 경우 ViewState가 양식 상단에서 자동으로 렌더링됩니다 (나머지 페이지가로드되기 전에).

특정 특정 버전의 Safari 3에 문제가 발생했습니다. 내 솔루션은 Viewstate를 양식의 상단으로 옮기는 것이 었습니다 (페이지 클래스를 확장하고 Pre-3.5 SP1 또는 .NET 3.5 SP1 이상의 렌더 메소드를 덮어 쓰는 것이 었습니다. 기본적으로이를 수행하고 viewstate를 하나의 몬스터 파일 대신 여러 다른 필드로 분할합니다. 보다 ASP.NET 2.0의 ViewState Chunking (MaxPagestateFieldLength)

이 무료 온라인 도구 : http://aspnetresources.com/tools/machinekey web.config 파일의 System.Web 요소 아래에서 machinekey 요소를 생성합니다. 다음은 생성하는 내용의 예입니다.

<machineKey validationKey="1619AB2FDEE6B943AD5D31DD68B7EBDAB32682A5891481D9403A6A55C4F91A340131CB4F4AD26A686DF5911A6C05CAC89307663656B62BE304EA66605156E9B5" decryptionKey="C9D165260E6A697B2993D45E05BD64386445DE01031B790A60F229F6A2656ECF" validation="SHA1" decryption="AES" />

Web.config에서 이것을 볼 때 오류 자체가 갑자기 의미가 있습니다. 당신이받는 오류는 말합니다

"구성이 동일한 유효성 검사장 및 유효성 검사 알고리즘을 지정하는지 확인하십시오".

이 machykey 요소를 볼 때 갑자기 그것이 무슨 말을하는지 알 수 있습니다.


web.config 에서이 값을 "하드 코딩"함으로써 ASP.NET이 서버 팜의 서버에서 어떤 서버를 선택하든 viewstate가 직렬화하고 조작하는 데 사용하는 키입니다. 당신의 암호화는 "휴대용"이되므로 뷰 스테이트는 "휴대용"이됩니다.

나는 단지 아마도 그 것도 추측하고 있습니다 아주 동일한 서버 (농장에 있지 않음) 어떤 이유로 든이 문제는 어떤 이유로 든이 문제가 발생하면 닦는 수준의 재설정으로 인해 발생한 열쇠를 "잊어 버린다". 그렇기 때문에 유휴 기간 후이 오류를보고 "오래된"페이지를 사용하려고합니다.

"모든 뷰 스테이트로드 전에 포스트 백이 중지됩니다."

나는 전에이 정확한 문제를 겪었고 이것이 원인이었습니다.

처음에는 ViewStatemac 속성을 비활성화했습니다 (enableViewStateMac="false" 에서 page 지침)이를 해결하기 위해서는 문제에 대한 진정한 해결책이 아니며 데이터 무결성을 위협 할 수 있습니다. 우리는 페이지가 완전히로드 될 때까지 제출 버튼을 비활성화하고 일부 컨트롤에서 비활성화하여 ViewState의 크기를 다듬을 때까지 제출 버튼을 비활성화하여 해결했습니다.

내 웹 사이트 에서이 문제의 근본을 찾았고 마침내 해결하다 그것. 이것은 귀하의 질문에 대한 직접적인 답이 아니지만이 작은 정보를 공유하고 싶었습니다.

과거에는 모든 것을 시도했지만 (위의 Jeffaxe가 제안한 솔루션 포함) 결과없이 설정하고 싶지 않았습니다. enableViewStateMac="false" (Raelshark가 위에서 언급 한 것처럼) 내 페이지에 문제가 숨겨져 있기 때문입니다.

내 경우 문제를 일으킨 원인은 무엇입니까? 문제는 사용으로 인해 발생했습니다 Intelligencia.urlrewriter (버전 2.0 RC 1 빌드 6) 내 웹 사이트의 특정 페이지에 모듈. SEO 친화적 인 링크를 사용하고 있었는데 ViewState 유효성 검사 실패가 발생했습니다. "정상"링크를 사용했을 때 (SEO 친화적 인 링크 대신) 문제가 사라졌습니다!

문제를 몇 차례 재현하여 잘못된 경보가 아닌지 확인했습니다 (ASP.NET 3.5를 사용합니다).

여러분 중 일부는 위의 모듈을 사용하지 않을 수도 있고 여전히이 오류를 얻을 수 있다는 것을 알고 있습니다. 이는 원인이 다른 것임을 암시합니다. 적어도이 경험을 공유하는 것은 일부에게 도움이 될 수 있습니다.

동작 속성이없는 페이지에 양식 태그 설정이있을 때이 오류가 발생한 다음 코드-비인트에서 양식의 동작 속성을 "action.aspx"로 변경했습니다.

그리고 JavaScript에서 나는 양식을 제출했습니다 (폼 .submit ();)

제 경우에는 보안 문제라고 생각하며 이미 페이지에 설정된 후에는 변경할 수 없습니다 ...?

이것이 다른 사람에게 도움이 될지 확실하지 않지만 내 솔루션은 쿠키가 통과하기 위해 내 webconfig에서 machinekey를 배제하는 것이 었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top