Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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