Ошибка Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась) или 404 во время PostBack при использовании HTML-тега base

14.06.2010 16:19 / Артём Волк / 1343 просмотра / ...

Проблема возникает, если для страниц сайта на ASP.NET Web Forms определён тег <base />, например, следующим образом:

<base href="http://example.com" />

Страницы, находящиеся на том же уровне, что и URL в теге <base /> будут работать нормально (например, такая страница: http://example.com/SomePage.aspx), но стоит попытаться использовать ещё одну страницу с тем же именем в подпапке, например, http://example.com/Folder/SomePage.aspx и при первом PostBack'e возникнет ошибка «Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась)». В случае, если на сайте существует только одна страница с таким именем, т.е. или http://example.com/Folder/SomePage.aspx, или http://example.com/SomePage.aspx ошибка будет уже стандартной HTTP-ошибкой 404.

Причина ошибки в том, что тег <form> будет сформируется следующим образом:

<form name="aspnetForm" method="post" action="SomePage.aspx" id="aspnetForm">

Из-за тега <base /> результирующий URL для отправки формы будет неверным: http://example.com/SomePage.aspx, где часть http://example.com/ берется из тега <base />, а SomePage.aspx из атрибута action формы.

Способ исправления этой ошибки аналогичен решению проблемы с PostBack'ом при использовании URL Rewriting'а.