Problem jest znany i dość powszechnie udokumentowany. Jednak ten Tip jest bardziej dla mnie ;) Jak to zapiszę to będę o tym pamiętał. Chodzi o to, że jak długo nie widzę tego błędu to potem jak wyskakuje to nie wiem co zrobić ;)

Dla przypomnienia, błąd wygląda mniej więcej tak:

The security validation for this page is invalid. Click Back in your Webbrowser, refresh the page, and try your operation again.

A rozwiązania są dwa i dwa są proste:

1) Rozwiązanie pierwsze to po prostu opakować kod w:

try
{
    web.AllowUnsafeUpdates = true;
}
catch(Exception ex)
{
}
finally
{
    web.AllowUnsafeUpdates = false;
}

2) Drugie rozwiązanie to na stronie Central Administration, wybrać następującą opcję:Central Administration —> Application Management —-> Web Application Settings –> "turn security validation off" – Rowzwiązanie nie zalecane!!

2 KOMENTARZE

  1. Zalecane “catch(Exception ex) {}” ?!
    Czegoś tutaj nie rozumiem: dlaczego mamy połykać praktycznie wszystkie wyjątki?
    Sam try/finally nie wystarczy?

  2. @Bysza

    ;)

    Wystarczy, to w kwesti przypomnienia bylo. Gdybym Ci tam napisal SPContentTypeSealedException to wiedzialbyś o co chodzi? nawet ja bym pewnie zapomniał a potem bym się zastanawiał czy to jest konieczne…

    Chciałem tylko zaznaczyć by wyłapywać wyjątki a dokładnie jak będe robił CopyPaste to zmienię wyjątek na konkretny a nie będe się męczył z dodaniem catch(){} co zawsze mnie osobiście drażni.

    Ale zeby nie bylo. AllowUnsafeUpdates moze wyzucic:

    catch(SPException spe)
    {
    // handle – jako pierwsze to nie jest Exception… to jest SharePoint Exception. Przed nim umieszczamy takie rzeczy jak SPContentTypeSealedException
    }
    catch (UnauthorizedAccessException uae)
    {
    // handle
    }
    catch (InvalidCastException ice)
    {
    // handle
    }
    catch (NullReferenceException nre)
    {
    // handle
    }

    do tego trzeba pamiętać o wszystkich innych wyjątkach które może wywalić wasz kod :)

    Gutek

Comments are closed.