Pergunta

Qual é a causa dessa exceção no ASP.NET? Obviamente, é uma exceção viewstate, mas eu não posso reproduzir o erro na página que está jogando a exceção (uma forma simples de dois TextBox com um botão de navegação e links).

FWIW, eu não estou correndo uma fazenda web.

Exceção

Mensagem de erro: Não é possível validar dados.

Erro Fonte: System.Web

Erro Site de destino: Byte [] GetDecodedData (Byte [], byte [], Int32, Int32, Int32 ByRef)

Post dados

VIEWSTATE:

/ wEPDwULLTE4NTUyODcyMTFkZF96FHxDUAHIY3NOAMRJYZ + CKsnB

EVENTVALIDATION:

/ wEWBAK + 8ZzHAgKOhZRcApDF79ECAoLch4YMeQ2ayv / Gi76znHooiRyBFrWtwyg =

Exceção Rastreamento de pilha

   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)

~ William Riley-Land

Foi útil?

Solução

A causa mais provável desse erro é quando um postback está parado antes de todas as cargas viewstate (o usuário pressiona a paragem ou botões nas costas), o estado de visualização irá falhar para validar e lançar o erro.

Outras causas possíveis:

  • Uma reciclagem do pool de aplicativos entre o tempo que o viewstate foi gerado e o tempo que o usuário envia-lo de volta para o servidor (improvável).
  • A fazenda web onde os MachineKeys não estão sincronizados (não o problema).

Update: artigo da Microsoft sobre a questão . Além do acima sugerem duas outras causas potenciais:

  • Modificação do viewstate por firewalls / software anti-vírus
  • Envio de uma página aspx para outro.

Outras dicas

Em .NET 3.5 SP1 a RenderAllHiddenFieldsAtTopOfForm propriedade foi adicionada à configuração PagesSection.

Web.config

<configuration>

    <system.web>

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

    </system.web>

</configuration>

Curiosamente, o valor padrão de que isso é verdade. Então, em essência, se você estiver usando o .NET 3.5 SP1 em seguida, o ViewState é automaticamente que está sendo processado no topo da forma (antes do resto da página é carregada), eliminando assim o erro ViewState você está recebendo.

Eu experimentei o problema com determinadas versões específicas do Safari 3. Minha solução foi para mover o ViewState para a parte superior do formulário (estendida da classe Page e substituiu o método de processamento de pré-3.5 SP1, ou Net 3.5 SP1 e posterior faz isso por padrão), e dividir o ViewState para vários campos diferentes em vez de um arquivo de monstro. Veja ViewState Chunking em ASP.NET 2.0 (maxPageStateFieldLength)

Esta ferramenta online gratuita: http://aspnetresources.com/tools/machineKey gera um elemento machineKey sob o elemento system.web do arquivo web.config. Aqui está um exemplo do que ele gera:

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

Depois de ver isso no seu web.config, o erro em si de repente faz sentido. O erro que você está recebendo diz

"assegurar que especifica a configuração da mesma validationKey e algoritmo de validação".

Quando você olha para este elemento machineKey, de repente você pode ver o que está falando.


Por "hard codificação" esse valor em seu web.config, a chave que usa ASP.NET para serializar e desserializar as suas estadias viewstate o mesmo, não importa qual servidor em um server farm pega. Sua criptografia torna-se "portátil", assim o seu estado de visualização torna-se "portátil".

Eu estou apenas supondo também que talvez o muito mesmo servidor (e não em uma fazenda) tem este problema, se por qualquer razão, "esquece" a chave que tinha, devido a um reset em qualquer nível que limpa-lo. Talvez por isso você vê este erro após um período inativo e você tentar usar uma página "obsoleto".

"uma nova postagem é parado antes de todas as cargas viewstate"

Eu tive esse problema exato antes, e esta foi a causa.

Inicialmente desabilitamos a propriedade ViewStateMac (enableViewStateMac="false" na directiva page) para resolvê-lo, mas isso não é uma verdadeira solução para o problema e pode ameaçar a integridade dos dados. Nós finalmente solucionados pelo desativada nosso botão enviar até que a página estava completamente carregado, e aparar o tamanho de nossa viewstate, desativando-o em alguns controles.

Eu encontrei a raiz do problema em meu site e eu finalmente consegui resolver isso. Esta não é uma resposta directa à sua pergunta, mas eu queria compartilhar este pequeno pedaço de informação.

No passado, eu tentei de tudo (incluindo a solução proposta pela Jeffaxe, acima), mas sem resultado, e eu não queria conjunto enableViewStateMac="false" (como Raelshark menciona acima) à minha página, porque isso apenas esconde o problema.

O que causou o problema no meu caso? O problema foi causado pelo uso do Intelligencia.UrlRewriter módulo em determinadas páginas do meu site (Versão 2.0 RC 1 build 6). Eu estava usando alguns links SEO amigável e que estava causando a falha de validação ViewState. Quando eu usei as ligações "normais" (em vez das ligações SEO-friendly), o problema desapareceu!

I reproduzido o problema algumas vezes para se certificar de que não era um alarme falso (eu uso ASP.NET 3.5).

Eu sei que alguns de vocês não pode utilizar o módulo acima, e ainda obter este erro, o que implica que a causa é outra coisa. Pelo menos, compartilhar esta experiência pode ser útil para alguns.

Eu tenho esse erro quando eu tinha uma configuração tag forma na minha página sem um atributo de ação, e depois no código-behind, eu mudei atributo action do formulário para "Action.aspx".

E em JavaScript, eu submeti o formulário (theForm.submit ();)

Eu acho que no meu caso era uma questão de segurança, e que você não pode mudar isso depois de ele já foi definido na página ...?

Não sei se isso iria ajudar ninguém, mas a minha solução foi a exclusão do machineKey no meu webconfig para o meu cookie para obter passado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top