Article d’origine publié le jeudi 15 septembre 2011

Je suis sûr que la plupart d’entre vous a déjà rencontré mon vieil ami : « La validation de la sécurité de cette page n’est pas valide. Cliquez sur Précédente de votre navigateur et retentez l’opération. » Ce problème survient généralement lorsque l’on essaie d’ajouter un élément à une liste, bien souvent dans un délégué RunWithElevatedPrivileges. De nombreuses personnes ont rencontré certains problèmes courants et sont parvenues à trouver des solutions de contournement :

  • Problèmes courants : utilisation de RunWithElevatedPrivileges, mais utilisation d’un contexte SPSite ou SPWeb préexistant. Pas de chance ici car votre contexte SPSite ou SPWeb existant n’apprécie pas les privilèges du RunWithElevatedPrivileges appelé ultérieurement.
  • Solution de contournement courante : affectez la valeur True à la propriété AllowUnsafeUpdates, ajoutez votre élément à la liste, puis réaffectez la valeur False à la propriété.

J’ai trouvé une solution de contournement plus inhabituelle dans une situation similaire : j’utilise une page personnalisée pour le répertoire _layouts et dans le code-behind j’ajoute un élément de liste. J’ai réussi à contourner grossièrement le problème en 2 minutes car ça n’est pas la première fois que je le rencontrais (comme dans SharePoint 2003 lorsqu’ils ont ajouté le contrôle FormDigest), mais cette fois-ci j’ai voulu étudier le problème en profondeur pour savoir s’il était possible de trouver une alternative.

En fait, on peut appeler SPUtility.ValidateFormDigest() juste avant de démarrer notre code RunWithElevatedPrivileges. Cela permet de placer le code de validation de formulaire dans la pile et de pouvoir poursuivre l’ajout. Pour ma part, j’ai hérité de LayoutsPageBase et mon balisage aspx était configuré comme toute autre page _layouts, dans le sens où il utilisait une page maître contenant déjà un élément <form> et une instance de contrôle <FormDigest>. Si ces éléments ne figurent pas dans votre page ou dans votre page maître, vous devrez les ajouter également. Le code AllowUnsafeUpdates n’étant plus nécessaire, la page entière et le processus sont beaucoup plus sûrs. Pensez à cette approche la prochaine fois que vous travaillez dans un scénario similaire.

Ceci est une version localisée d’un billet de blog. Vous trouverez la version originale à la page A New Twist on an Old Friend - "The security validation for this page is invalid" - in SharePoint 2010