ASP.NET MVC AntiForgeryToken выдает свое исключение на GET? - PullRequest
3 голосов
/ 22 июня 2010

У меня странная ошибка в паре приложений MVC, которую я раньше не замечал; это происходит в моем приложении (по всем направлениям), а также, когда я пытался запустить последнюю версию Orchard (так что я знаю, что это не просто мой код).

По сути, проблема в том, что я получаю исключение, которое должно быть выдано, когда AntiforgeryToken не предоставляется, но ожидается, только я получаю его, когда нажимаю действия GET; в первый раз я захожу на страницу.

Я проследил поведение, которое происходит при перестройке приложения или его повторном развертывании. Например, я запустил свой сайт на локальном сервере IIS, затем изменил настройки для работы в Cassini (очевидно, перестроение и т. Д. В середине), и я получил ошибку. То же самое, когда я удалил сайт Orchard и восстановил его (в том же VS). То же самое, когда я повторно разместил свой сайт в Интернете.

Решение, которое я нашел, состояло в том, чтобы очистить куки моего браузера, но кажется очень странным, что вы получите эту ошибку при выполнении GET для конечной точки или я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 22 июня 2010

Это потому, что cookie-файлы зашифрованы в разных средах.Без указания машинного ключа для шифрования .NET использует тот, который похоронен в machine.config.

Чтобы исправить, добавьте определение машинного ключа вручную в ваш web.config:

<system.web>    
<machineKey validationKey="stuff" decryptionKey="stuff" validation="SHA1" decryption="AES" />

Используйте эточтобы сгенерировать один:

http://aspnetresources.com/tools/keycreator.aspx

1 голос
/ 22 июня 2010

Вы уверены, что действие, которое вы выполняете, не имеет атрибута [ValidateAntiForgeryToken]? Это исключение выдается, только если у вас есть атрибут.

...