>

Octubre 12

2018

Uno de los problemas que mas me han vuelto loco con las páginas en ASP es el error de Invalid View State. He estado peleando con ese error durante mucho tiempo, y poco a poco lo vamos controlando, pero de vez en cuando sigo recibiendo este tipo de errores.

Como solucionarlo

Esto lo podemos solucionar de varias maneras, pero la que más sencilla me ha parecido es variar un par de parámetros en el Web.Config de la aplicación ASP. Tenemos varias formas de hacerlo, una un poco más segura, pero al mismo tiempo afecta al rendimiento de la página, la segunda, menos segura, hará que la página cargue más rápida, pero al mismo tiempo, no es recomendable si vamos a enviar información sensible desde los formularios.

Este problema es generado por el ciclo de vida de la página, y cómo valida la información del ViewState, es por eso que las mejores soluciones vienen de cambiar el Web.Config, aunque también podríamos almacenar el ViewState en una variable de sesión en lugar de en un objeto oculto, que es cómo lo maneja ASP por defecto.

< input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTAyOTcwN....." />

Tenemos que sobre escribir dos procesos en la página para que lo almacene en una variable de sesión.

protected override object LoadPageStateFromPersistenceMedium() 
{
return Session["_ViewState"];
}

protected override void SavePageStateToPersistenceMedium(object viewState)
{
Session["_ViewState"] = viewState;
}

void TextChanged(object o, EventArgs e)
{
Response.Write("TextChanged");
}  

La desventaja de hacerlo de esta manera es que no se puede poner en la master.page. Por lo que éste código habría que repetirlo en cada página. Sería introducirlo sólo en las páginas con las que estás teniendo problemas. 

Lo más seguro

Haciendo los cambios en el Web.Config, podemos hacer un par de cambios y dispondremos de la solución más rápida, y segura. En la sección Page hay que agregar unas cuántas configuraciones, además de agregar una clave nueva.

Primero definimos una clave de validación en la sección MachineKey.

< machineKey  
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>

Luego modificamos la sección Page.

< pages enableViewStateMac="false" enableViewState="true" enableEventValidation="false" 
viewStateEncryptionMode="Always" maxPageStateFieldLength="16384" >

Al configurar enalbeViewStateMac="False" estamos deshabilitando la forma por defecto que utiliza ASP para encriptar la información almacenada en el ViewState. Pero esto puede ser desencriptado por el usuario. Por eso es mejor configurar en el MachineKey nuestras propias claves.

Esta sería la mejor forma de solucionar los errores de Invalid View State pero tenemos otra forma con menos cambios pero un poco más insegura.

Rápido pero menos seguro

Podríamos en el WebComfig cambiar sólo la configuración de Page sólo con dos parámetros. 

< pages enableViewStateMac="true" viewStateEncryptionMode="Never" >

Sólo con estos dos cambios, inicialmente, sería suficiente, la página cargará mas rápido, pero al mismo tiempo la información almacenada en el View State no va a terner encriptación ninguna y podría, un usuario mal intencionado, inyectar código malicioso. Es por eso que no es muy recomendable utilizar ésta configuración. Sólo si la página no mueve información sensible y lo que queremos es maximizar el rendimiento de carga.

Conclusiones

En tus manos queda decidir que solución aplicar en tu aplicación web ASP. Puede obtener más información en todos los enlaces que te dejo.

Happy coding

#ASP #IIS, #CSHARP #WEB


0 Comentarios



Archivo