"Microsoft.SharePoint.SPException: The security validation for this page is invalid" al crear subsitios

26.9.13 / Comments (0) / by Enric Carrión


Holaaa qué tal. En SharePoint 2013 tengo una colección de sitios rebelde, procedente de una migración de 2010, que se resiste a dejarme crear subsitios con mi definición personalizada de sitio. El método SPWebCollection.Add me devuelve la ya consabida letanía:

Microsoft.SharePoint.SPException: The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again

Spoiler: he conseguido evitarlo sin recurrir a una ñapa demasiado gorda. Eso sí, enumero los métodos utilizados infructuosamente hasta dar con el fix adecuado.

  1. SPSecurity.RunWithElevatedPrivileges y todo dentro del contexto : no effect
  2. SPSite.AllowUnsafeUpdates / SPWeb.AllowUnsafeUpdates : no effect
  3. SPUtility.ValidateFormDigest / SPWeb.ValidateFormDigest : no effect
  4. SPWebapplication.FormDigestSettings.Enabled = false y luego dejarlo con el valor original : imposible, dado que mi cuenta de pool de aplicaciones no es farm admin, con lo cual no tiene acceso para realizar esta operación. En general, esta restricción de permisos es la práctica recomendada, es decir que tomen nota los señores que publican en MSDN: http://blogs.msdn.com/b/navdeepm/archive/2010/04/29/microsoft-sharepoint-spexception-the-security-validation-for-this-page-is-invalid-in-sharepoint-2010.aspx
  5. Deshabilitar "Web Page Security Validation" en las General Settings de mi web application : tiene efecto, pero no es una buena solución para un entorno productivo.
  6. Decompilar el método SPRequestInternalClass.MoveUrl, que en mi caso es el que está provocando la excepción: método no administrado. Vuelva usted mañana.

Y ahora sí, la solución.
HttpContext.Current.Items["FormDigestValidated"] = "false";
Esto antes del código de creación del subsitio, evita la excepción anterior. Como solo afecta al contexto de esa petición en particular, no lo considero demasiado nocivo. Y dado que es lo único a lo que puede uno agarrarse... compro.



0 comentarios:

Publicar un comentario