У меня проблема с механизмом анти CRSF MVC. Возвращаемое содержимое файла cookie и формы не совпадает. Я получаю ошибку каждый раз, только на одной конкретной странице. В остальной части приложения он работает хорошо.
Сервер возвращает HTTP 500 Internal Server Error
, и я вижу в журнале это исключение:
[System.Web.Mvc.HttpAntiForgeryException]: { "Необходимая анти-подделка токен не был указан или был недействителен." }
Это скрытый ввод, который генерирует сервер:
<input name="__RequestVerificationToken" type="hidden" value="QK8P7rjyZE6Vm5seY7Fr704YCOoFGdTIMzl1W7R0ZFpXSMjGKLG2T05DfFSYTxvtQCEx7DDT69DGsDB2+ZXFHY8oAjiKz0gw8BhDFywgmfIpoXnGpj7fONNzIIfvbrDrE9WJsMu6Io/0bDLM5WfKs0zktiNjyOWpfYrmnfINYmjW8NLOZFoz74xTcgTptAld">
И это возвращает Cookie:
Set-Cookie:__RequestVerificationToken_L2VGbG93=skmTAVI8HCbfxDS+xhioIMIISL3UOBI7qJM1JbHjTtAqKl4W70pDUcTKMm0p3R3mrHDziE8vXw0C0OO4HArzWO1/e6py+v/cFdbe9maFgjl4jMiZ9Wc4YIhC6+IUXkk6yqJDJ8dCIr8qtGaYcD9IX+m7/SlVhu521KQSWJYRcaY=; path=/; HttpOnly
Когда я проверяю, что отправляет сервер, cookie - это точно то же самое, но полезная нагрузка имеет различную кодировку, я думаю:
__RequestVerificationToken:QK8P7rjyZE6Vm5seY7Fr704YCOoFGdTIMzl1W7R0ZFpXSMjGKLG2T05DfFSYTxvtQCEx7DDT69DGsDB2%2BZXFHY8oAjiKz0gw8BhDFywgmfIpoXnGpj7fONNzIIfvbrDrE9WJsMu6Io%2F0bDLM5WfKs0zktiNjyOWpfYrmnfINYmjW8NLOZFoz74xTcgTptAld
Различия заключаются в двух символах, которые выглядят закодированными:
/ -> %2F
+ -> %2B
Это единственные различия, которые я могу найти между скрытым полем ввода и почтовой полезной нагрузкой.
В чем может быть проблема, вызывающая ошибку ValidateAntiForgeryToken
при проверке токена?
С уважением.