asp.net-mvc-4 - tutorial - owin authentication asp net mvc




O campo obrigatório do formulário anti-falsificação “__RequestVerificationToken” não está presente Erro no registro do usuário (12)

Às vezes você está escrevendo um método de ação de formulário com uma lista de resultados. Nesse caso, você não pode trabalhar com um método de ação. Então você tem que ter dois métodos de ação com o mesmo nome. Um com [HttpGet] e outro com o atributo [HttpPost] .

Em seu método de ação [HttpPost] , defina o atributo [ValidateAntiForgeryToken] e também coloque @Html.AntiForgeryToken() em seu formulário html.

Estou usando a função de usuário Membership.create , o seguinte erro está ocorrendo,

O campo obrigatório de formulário anti-falsificação "__RequestVerificationToken" não está presente

Como posso consertar isso?


Certifique-se no seu controlador que você tem seu atributo http como:

[HttpPost]

adicione também o atributo no controlador:

[ValidateAntiForgeryToken]

Na sua forma em sua visão, você tem que escrever:

@Html.AntiForgeryToken();

Eu tinha Html.AntiForgeryToken (); sem o sinal @ enquanto estava em um bloco de código, ele não apresentou um erro no Razor, mas sim no tempo de execução. Certifique-se de olhar para o sinal @ de @Html.Ant .. se estiver faltando ou não


Como isso:

O controlador

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MethodName(FormCollection formCollection)
{
     ...
     Code Block
     ...
}

A vista:

@using(Html.BeginForm())
{
     @Html.AntiForgeryToken()
     <input name="..." type="text" />
     // rest
}

Eu gostaria de compartilhar o meu, eu tenho seguido este tutorial anti-falsificação usando asp.net mvc 4 com angularjs, mas lança uma exceção toda vez que eu pedir usando $ http.post e descobri a solução é apenas adicionar 'X- Requested-With ':' XMLHttpRequest ' para os cabeçalhos de $ http.post, porque parece que o (filterContext.HttpContext.Request.IsAjaxRequest()) não o reconhece como ajax e aqui está o meu código de exemplo.

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) { ....


No meu caso, eu tinha este javascript no formulário de envio:

$('form').submit(function () {
    $('input').prop('disabled', true);
});

Isso estava removendo o RequestVerificationToken oculto do formulário que estava sendo enviado. Eu mudei isso para:

$('form').submit(function () {
    $('input[type=submit]').prop('disabled', true);
    $('input[type=text]').prop('readonly', true);
    $('input[type=password]').prop('readonly', true);
});

... e funcionou bem.


No meu caso, eu tinha isso no meu web.config:

<httpCookies requireSSL="true" />

Mas meu projeto foi configurado para não usar SSL. Comentando essa linha ou configurando o projeto para usar sempre SSL resolveu-lo.


No meu caso, o domínio incorreto no web.config para cookies foi o motivo:

<httpCookies domain=".wrong.domain.com" />

Outra coisa que pode causar isso (apenas correu para isso) é o seguinte: se por algum motivo você desativar todos os campos de entrada em seu formulário. ele desativará o campo de entrada oculto que contém seu token de verificação. quando o formulário for postado de volta, o valor do token estará ausente e gerará o erro que está faltando. Então, o que você precisa fazer é reativar o campo de entrada que contém o token de verificação e tudo ficará bem.


Porque isso surge com a primeira pesquisa:

Eu tive esse problema apenas no Internet Explorer e não conseguia descobrir qual era o problema. Resumindo, não estava salvando a parte do cookie do Token porque nosso (sub) domínio tinha um sublinhado nele. Trabalhou no Chrome, mas o IE / Edge não gostou.


Se alguém experimenta o erro pela mesma razão pela qual eu experimentei, aqui está minha solução:

se você tivesse Html.AntiForgeryToken();

mude para @Html.AntiForgeryToken()


Você receberá o erro mesmo quando os cookies não estiverem ativados.


Você tem o atributo [ValidateAntiForgeryToken] antes de sua ação. Você também deve adicionar @Html.AntiForgeryToken() em seu formulário.





asp.net-membership