Pregunta

¿Cuál es la causa de esta excepción en ASP.NET? Obviamente es una excepción de estado de vista, pero no puedo reproducir el error en la página que está lanzando la excepción (un simple formulario de dos cuadros de texto con un botón y enlaces de navegación).

FWIW, no estoy ejecutando una granja web.

Excepción

  

Mensaje de error: no se puede validar   datos.

     

Fuente de error: System.Web

     

Sitio de destino de error: Byte []   GetDecodedData (Byte [], Byte [], Int32,   Int32, Int32 ByRef)

Datos de publicación

  

VIEWSTATE:

     

/ wEPDwULLTE4NTUyODcyMTFkZF96FHxDUAHIY3NOAMRJYZ + CKsnB

     

VALIDACIÓN DEL EVENTO :

     

/ wEWBAK + 8ZzHAgKOhZRcApDF79ECAoLch4YMeQ2ayv / Gi76znHooiRyBFrWtwyg =

Rastreo de pila de excepción

   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

¿Fue útil?

Solución

La causa más probable de este error es cuando se detiene una devolución de datos antes de que se cargue todo el estado de vista (el usuario presiona los botones de detener o retroceder), el estado de vista no podrá validar y lanzar el error.

Otras causas potenciales:

  • Un grupo de aplicaciones que se recicla entre el momento en que se generó el estado de vista y el momento en que el usuario lo vuelve a publicar en el servidor (poco probable).
  • Una granja de servidores web donde machineKeys no están sincronizados (no es su problema).

Actualización: Artículo de Microsoft sobre el tema . Además de lo anterior, sugieren otras dos causas potenciales:

  • Modificación de viewstate por firewalls / software antivirus
  • Publicación de una página aspx a otra.

Otros consejos

En .NET 3.5 SP1, la propiedad RenderAllHiddenFieldsAtTopOfForm se agregó a la configuración de PagesSection.

Web.config

<configuration>

    <system.web>

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

    </system.web>

</configuration>

Curiosamente, el valor predeterminado de esto es cierto. Entonces, en esencia, si está utilizando .NET 3.5 SP1, entonces el ViewState se representa automáticamente en la parte superior del formulario (antes de que se cargue el resto de la página), eliminando así el error de ViewState que está obteniendo.

He experimentado el problema con ciertas versiones específicas de Safari 3. Mi solución fue mover el ViewState a la parte superior del formulario (extendió la clase Page y sobrescribió el método Render para pre-3.5 SP1 o .Net 3.5 SP1 y versiones posteriores hacen esto de manera predeterminada), y para dividir el ViewState en varios campos diferentes en lugar de un archivo de monstruo. Ver ViewState Chunking en ASP.NET 2.0 (maxPageStateFieldLength)

Esta herramienta en línea gratuita: http://aspnetresources.com/tools/machineKey genera un elemento machineKey bajo el elemento system.web en el archivo web.config. Aquí hay un ejemplo de lo que genera:

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

Una vez que vea esto en su web.config, el error en sí mismo de repente tiene sentido. El error que está recibiendo dice

  

" asegúrese de que la configuración especifique lo mismo   validationKey y algoritmo de validación " ;.

Cuando observa este elemento machineKey, de repente puede ver de qué está hablando.


Por "codificación rígida" este valor en su web.config, la clave que asp.net usa para serializar y deserializar su estado de vista permanece igual, sin importar qué servidor en una granja de servidores lo recoja. Su cifrado se convierte en "portátil", por lo que su estado de vista se convierte en "portátil".

Supongo también que tal vez el mismo servidor (no en una granja de servidores) tiene este problema si por alguna razón se "olvida". la clave que tenía, debido a un reinicio en cualquier nivel que lo borra. Esa es quizás la razón por la que ve este error después de un período de inactividad e intenta usar un " obsoleto " página.

  

" se detiene una devolución de datos antes de que se cargue todo el estado de la vista "

He tenido este problema exacto antes, y esta fue la causa.

Inicialmente deshabilitamos la propiedad ViewStateMac ( enableViewStateMac = " false " en la directiva page ) para resolverlo, pero esta no es una verdadera solución al problema y puede amenazar la integridad de los datos. Finalmente lo resolvimos deshabilitando nuestro botón de envío hasta que la página se haya cargado por completo, y recortando el tamaño de nuestro estado de vista deshabilitándolo en algunos controles.

He encontrado la raíz de este problema en mi sitio web y finalmente pude resolverlo . Esta no es una respuesta directa a su pregunta, pero quería compartir esta pequeña información.

En el pasado intenté todo (incluida la solución propuesta por Jeffaxe, arriba) pero sin resultado, y no quería configurar enableViewStateMac = " false " (como Raelshark menciona arriba) ) a mi página, porque esto simplemente oculta el problema.

¿Qué causó el problema en mi caso? El problema fue causado por el uso del módulo Intelligencia.UrlRewriter (Versión 2.0 RC 1 build 6) en ciertas páginas de mi sitio web. Estaba usando algunos enlaces amigables con SEO y eso estaba causando la falla de validación de ViewState. Cuando usé "normal" enlaces (en lugar de los enlaces compatibles con SEO) ¡el problema desapareció!

Reproduje el problema varias veces para asegurarme de que no se trataba de una falsa alarma (uso ASP.NET 3.5).

Sé que algunos de ustedes pueden no usar el módulo anterior y aún así obtener este error, lo que implica que la causa es otra cosa. Al menos, compartir esta experiencia puede ser útil para algunos.

Recibí este error cuando tenía una configuración de etiqueta de formulario en mi página sin un atributo de acción, y luego, en el código subyacente, cambié el atributo de acción del formulario a "Action.aspx".

Y en JavaScript, envié el formulario (theForm.submit ();)

Creo que en mi caso fue un problema de seguridad, y que no puede cambiar esto después de que ya esté configurado en la página ...?

No estoy seguro de si esto ayudaría a alguien, pero mi solución fue la exclusión de machineKey en mi configuración web para que se pasara mi cookie.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top