visual tutorial studio net mvc framework español asp asp.net-mvc

asp.net-mvc - tutorial - mvc asp.net c#



ASP.NET MVC validación de ViewState MAC falló (3)

Después de publicar una nueva versión de mi aplicación web ASP.NET MVC, a menudo veo esta excepción lanzada al navegar por el sitio:

System.Web.Mvc.HttpAntiForgeryException: no se proporcionó un token anti-falsificación requerido o no fue válido. ---> System.Web.HttpException: la validación de viewstate MAC falló. Si esta aplicación está alojada en una granja de servidores web o un clúster, asegúrese de que la configuración especifique el mismo algoritmo de validación y clave de validación. AutoGenerate no se puede utilizar en un clúster. ---> System.Web.UI.ViewStateException: viewstate no válido.

Esta excepción seguirá ocurriendo en cada página que visito en mi aplicación web hasta que cierre Firefox. Después de volver a abrir Firefox, el sitio funciona perfectamente. ¿Tienes idea de lo que está pasando?

Notas adicionales:

  1. No estoy usando ningún control web ASP.NET (no hay instancias de runat = "servidor" en mi aplicación)
  2. Si saco el <% = Html.AntiForgeryToken%> de mis páginas, este problema parece desaparecer

Bajo las coberturas, el atributo MVC AntiForgeryToken usa la clave de la máquina para el cifrado. Si no especifica una clave de máquina en web.config (consulte here ), ASP.NET generará automáticamente una ( here ).

Si se reinicia la aplicación ASP.NET (p. Ej., Haga un iisreset ), el AntiForgeryToken dentro de la cookie del navegador aún estará encriptado con una clave de máquina antigua, por lo que se bloquea con el error anterior.

Por lo tanto, siempre debe especificar una clave de máquina en su web.config cuando use MVC, por ejemplo

<configuration> <system.web> <machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B" decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F" validation="SHA1" decryption="AES" /> ...


Si está en una granja de servidores, asegúrese de que la clave de su máquina en cada servidor sea la misma.


Yo también tuve este problema, y ​​esperar que los usuarios borren su caché, las cookies o la actualización de la página no es aceptable.

Agregar una clave de máquina a web.config es lo que solucionará esto. Utilicé esta herramienta para generar rápidamente una clave, por lo que no veo estos errores en el desarrollo y luego genero una correctamente cuando el sitio entra en producción.

aspnetresources.com/tools/machineKey