Требуемое поле формы защиты от подделки "RequestVerificationToken" отсутствует ошибка при регистрации пользователя



Я использую Membership.create пользовательская функция, то происходит следующая ошибка,




требуемое поле формы защиты от подделки "_ _ RequestVerificationToken " является
нет




Как я могу это исправить?

744   15  

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' сообщение вместо превышения длины запроса сообщение.

установка 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()

в моем случае неверный домен в сети.конфиг для 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.сообщение, и я понял, что решение просто добавить 'X-Requested-With': 'XMLHttpRequest' к заголовкам $http.пост, потому что это похоже на (filterContext.HttpContext.Request.IsAjaxRequest()) не распознает его как ajax и вот мой пример код.

приложение.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) { ....

Comments

    Ничего не найдено.