Подтвердить что ты не робот

Ошибка ASP.NET MVC проверки MAC-адреса ViewState

После публикации новой сборки моего веб-приложения ASP.NET MVC я часто вижу это исключение, которое вызывается при просмотре на сайт:

System.Web.Mvc.HttpAntiForgeryException: Требуемый токен анти-подделки не был указан или был недействителен. --- > System.Web.HttpException: Не удалось выполнить проверку MAC-адреса viewstate. Если это приложение размещено веб-фермой или кластером, убедитесь, что в конфигурации указан тот же алгоритм validationKey и validation. AutoGenerate не может использоваться в кластере. --- > System.Web.UI.ViewStateException: недопустимое состояние просмотра.

Это исключение будет продолжаться на каждой странице, которую я посещаю в своем веб-приложении, пока я не закрою Firefox. После повторного открытия Firefox сайт работает отлично. Любая идея, что происходит?

Дополнительные примечания:

  • Я не использую никаких веб-элементов управления ASP.NET(в моем приложении нет экземпляров runat = "server" )
  • Если я вытащил <% = Html.AntiForgeryToken% > с моих страниц, эта проблема, похоже, исчезнет.
4b9b3361

Ответ 1

Под обложками атрибут MVC AntiForgeryToken использует машинный ключ для шифрования. Если вы не укажете машинный ключ в файле web.config(см. здесь), он автоматически создается для вас ASP.NET(полное описание).

Если приложение ASP.NET перезапускается (например, iisreset), AntiForgeryToken в cookie браузера по-прежнему будет зашифрован с помощью старого машинного ключа, поэтому он сбой с вышеуказанной ошибкой.

Поэтому вы всегда должны указывать машинный ключ в своем web.config при использовании MVC, например

<configuration>
    <system.web>
        <machineKey  
            validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
            decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
            validation="SHA1"
            decryption="AES"
        />
    ...

Ответ 2

Если вы находитесь на ферме серверов, убедитесь, что ваш машинный ключ на каждом сервере одинаков.

Ответ 3

У меня тоже была эта проблема, и ожидая, что пользователи очистят свой кеш, куки или обновят страницу, неприемлемо.

Добавление машинного ключа в web.config будет исправлено. Я использовал этот инструмент для быстрого создания ключа, поэтому я не вижу этих ошибок в разработке, а затем создаю его правильно, когда сайт переходит в производство.

http://aspnetresources.com/tools/machineKey