Как я могу использовать несколько форм ajax с проверкой AntiForgery на одной странице MVC3? - PullRequest
3 голосов
/ 25 ноября 2011

Когда у нас есть несколько возможных форм для отправки на контроллер на одной странице cshtml, Антивирусная проверка не работает. Мы просмотрели код MVC3 и обнаружили, что проблема в этой части кода:

if (!String.Equals(cookieToken.Value, formToken.Value, StringComparison.Ordinal)) {
            // error: form token does not match cookie token
            throw CreateValidationException();
}

cshtml, который у нас есть, выглядит примерно так:

@using (@Ajax.BeginForm()) {
    @Html.AntiForgeryToken()
    <input type="submit" class="buttonBlue" value="form1" />
}

@using (@Ajax.BeginForm()) {
    @Html.AntiForgeryToken()
    <input type="submit" class="buttonBlue" value="form2" />
}

Можете ли вы помочь мне решить эту проблему? Мы обнаружили, что после удаления одного из жетонов защиты от подделки все работает, как и ожидалось.

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

Привет.

1 Ответ

6 голосов
/ 25 ноября 2011

Чтобы использовать AntiForgeryToken несколько раз, я делаю следующее. Во-первых, в верхней части моего представления я добавляю следующую строку:

ViewBag.__RequestVerificationToken = @Html.AntiForgeryToken().ToString();

Затем в каждой форме, где мне нужен токен, я добавляю следующее:

@Html.Raw(ViewBag.__RequestVerificationToken)
...