Share via


Uma nova reviravolta em um amigo antigo - "A validação de segurança para esta página é inválida" - no SharePoint 2010

Artigo original publicado em 15 de setembro de 2011, quinta-feira

Tenho certeza de que muitos, muitos, muitos de vocês viram o meu velho amigo (ok, há exceção), que é algo assim: "A validação de segurança para esta página é inválida. Clique em Voltar no seu navegador da Web, atualize a página e tente a operação novamente." É como o gel do clube do mês - é o dom que continua sendo dado. Este problema geralmente surge quando você está tentando adicionar um item a uma lista...geralmente, com um delegado RunWithElevatedPrivileges. Agora muitas pessoas encontraram alguns problemas e soluções comuns:

  • Problemas comuns - usar RunWithElevatedPrivileges, mas usar um contexto SPSite ou SPWeb pré-existente. Não há graça porque seu contexto SPSite ou SPWeb existente não desfruta dos privilégios de RunWithElevatedPrivileges chamado subsequentemente.
  • olução comum - defina a propriedade AllowUnsafeUpdates no SPWeb como verdadeira, adicione seu item à lista, em seguida, defina a propriedade de volta como falso. Ok, funciona, mas geralmente me faz sentir que protegi demais o gel de julho (sabe... do meu gel do clube do mês?? :-) Continue comigo aqui).

TA solução mais incomum que encontrei foi em uma situação similar - Eu estava usando uma página personalizada para o diretório _layouts e no código por trás eu estava adicionando um item da lista Eu a deixei funcionando de maneira rápida e constante por cerca de 2 minutos, porque já vi este problema muitas vezes antes (como voltar ao SharePoint 2003 quando acrescentaram o controle FormDigest). Desta vez, porém eu queria ir um pouco mais fundo para ver se podia encontrar uma alternativa. E desta vez encontrei.

Como se constata, você pode chamar SPUtility.ValidateFormDigest() antes de iniciar seu código RunWithElevatedPrivileges. Isso obtém o código de validação de formulário na pilha e deixa a adição continuar com sucesso. Em meu caso particular, eu estava herdando de LayoutsPageBase e minha marcação aspx foi configurada como qualquer outra página _layouts, porque usava uma página mestre que já continha um <form> elemento e uma <FormDigest> instância de controle. Se você não tem um desses em sua página ou mestre, então precisará adicioná-los também. O código AllowUnsafeUpdates não é mais necessário e, portanto, a página inteira e o processo é muito mais seguro. Dê uma olhada nessa abordagem da próxima vez que estiver trabalhando em um cenário similar.

Esta é uma postagem de blog localizada. O artigo original encontra-se em A New Twist on an Old Friend - "The security validation for this page is invalid" - in SharePoint 2010