В требуемом поле формы защиты от подделки "RequestVerificationToken" нет ошибки при регистрации пользователя
Я использую Membership.create
пользовательская функция, затем возникает следующая ошибка,
требуемое поле формы защиты от подделки "_ _ RequestVerificationToken" нет
Как я могу это исправить?
15 ответов
вы [ValidateAntiForgeryToken]
атрибут перед вашим действием. Вы также должны добавить @Html.AntiForgeryToken()
в вашей форме.
в моем случае у меня это было в моей сети.config:
<httpCookies requireSSL="true" />
но мой проект был настроен не использовать SSL. Комментируя эту строку или настраивая проект, чтобы всегда использовать SSL, решил ее.
такой:
Контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MethodName(FormCollection formCollection)
{
...
Code Block
...
}
Вид:
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
<input name="..." type="text" />
// rest
}
также убедитесь, что не используйте [ValidateAntiForgeryToken] в разделе [HttpGet].
[HttpGet]
public ActionResult MethodName()
{
..
}
еще одна вещь, которая может вызвать это (просто столкнулся с этим), это следующее: если вы по какой-то причине отключить все поля ввода в форме. он отключит скрытое поле ввода, содержащее маркер проверки. когда форма будет разнесена обратно, значение токена будет отсутствовать и создаст ошибку, которая отсутствует. поэтому вам нужно снова включить поле ввода, содержащее токен проверки, и все будет хорошо.
еще одна возможность для тех из нас, кто загружает файлы в рамках запроса. Если длина содержимого превышает <httpRuntime maxRequestLength="size in kilo bytes" />
и вы используете токены проверки запроса, браузер отображает 'The required anti-forgery form field "__RequestVerificationToken" is not present'
message вместо длины запроса превышено сообщение.
установка maxRequestLength в значение, достаточно большое, чтобы удовлетворить запрос лечит непосредственную проблему - хотя я признаю, что это не правильное решение (мы хотим, чтобы пользователь знал истинную проблему размера файла, не то, что токены проверки запроса отсутствуют).
убедитесь, что в вашем контроллере у вас есть атрибут http, например:
[HttpPost]
также добавьте атрибут в контроллер:
[ValidateAntiForgeryToken]
в вашей форме на вашем представлении вы должны написать:
@Html.AntiForgeryToken();
У меня был Html.AntiForgeryToken (); без знака@, пока он был в блоке кода, он не дал ошибку в Razor, но сделал во время выполнения. убедитесь, что вы смотрите на @ знак @Html.Муравей.. если он отсутствует или нет
в моем случае у меня был этот javascript в форме submit:
$('form').submit(function () {
$('input').prop('disabled', true);
});
это удаление скрытого RequestVerificationToken из отправляемой формы. Я изменил это:
$('form').submit(function () {
$('input[type=submit]').prop('readonly', true);
$('input[type=text]').prop('readonly', true);
$('input[type=password]').prop('readonly', true);
});
... и это сработало отлично.
Если кто-то испытывает ошибку по той же причине, почему я ее испытываю, вот мое решение:
если бы у вас был Html.AntiForgeryToken();
изменить на @Html.AntiForgeryToken()
в моем случае неверный домен в web.конфиг для cookies был причиной:
<httpCookies domain=".wrong.domain.com" />
в моем решении EPiServer на нескольких контроллерах был атрибут ContentOutputCache в действии индекса, который принял HttpGet. Каждое представление для этих действий содержало форму, которая отправляла действие HttpPost на тот же контроллер или на другой. Как только я удалил этот атрибут из всех этих действий индекса, проблема исчезла.
потому что это приходит с первым поиском этого:
У меня была эта проблема только в Internet Explorer и не мог понять, в чем проблема. Короче говоря, он не сохранял часть cookie токена, потому что в нашем (суб)домене было подчеркивание. Работал в Chrome, но IE / Edge это не понравилось.
все остальные ответы здесь также действительны, но если ни один из них не решает проблему, также стоит проверить, что фактические заголовки передаются на сервер.
например, в среде с балансировкой нагрузки за nginx конфигурация по умолчанию -удалите заголовок _ _ RequestVerificationToken перед передачей запроса на сервер см.:простой обратный прокси-сервер nginx, похоже, удаляет некоторые заголовки
Я хотел бы поделиться своим, я следил за этим анти-forgerytoken учебник
использование asp.net mvc 4 с angularjs, но он выдает исключение каждый раз, когда я запрашиваю с помощью $http.post и я понял, что решение просто добавить
'X-Requested-With':'XMLHttpRequest' к заголовкам $http.сообщение, потому что это похоже на (filterContext.HttpContext.Request.IsAjaxRequest())
не распознает его как ajax и вот мой пример код.
App.js
var headers = {
'X-Requested-With': 'XMLHttpRequest',
'RequestVerificationToken': $scope.token,
'Content-Type': 'application/json; charset=utf-8;'
};
$http({
method: 'POST',
url: baseURL + 'Save/User',
data: JSON.stringify($scope.formData),
headers: headers
}).then(function (values) {
alert(values.data);
}).catch(function (err) {
console.log(err.data);
});
SaveController
[HttpPost]
[MyValidateAntiForgeryToken]
public ActionResult User(UserModel usermodel)
{
....