Estou usando Membership.create
a função de usuário, o seguinte erro está ocorrendo,
O campo obrigatório do formulário anti-falsificação "__RequestVerificationToken" não está presente
Como posso consertar isso?
asp.net-mvc-4
asp.net-membership
Hemant Soni
fonte
fonte
Html.AntiForgeryToken();
não funciona !! Transformando-se em@Html.AntiForgeryToken()
obrasNo meu caso, eu tinha isso no meu web.config:
<httpCookies requireSSL="true" />
Mas meu projeto foi definido para não usar SSL. Comentar essa linha ou configurar o projeto para sempre usar SSL resolveu a questão.
fonte
IIS
havia essa ligação (https » EmptyHostName » IP » 443
), mas não havia uma ligação para (https » www.mysite.com » IP » 443
). Então, adicionei uma nova ligação com um nome de host não vazio, poishttps
era igual ao domínio e resolveu o problema. Também reescrevi as configuraçõesIIS
para forçarhttp 2 https
.Como isso:
O controlador
A vista:
fonte
Além disso, evite usar [ValidateAntiForgeryToken] em [HttpGet].
fonte
Você receberá o erro mesmo quando os cookies não estiverem ativados.
fonte
Outra coisa que pode causar isso (acabei de descobrir isso) é o seguinte: se, por algum motivo, você desabilitar todos os seus campos de entrada no 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. portanto, o que você precisa fazer é reativar o campo de entrada que contém o token de verificação e tudo ficará bem.
fonte
Outra possibilidade para nós carregar arquivos como parte da solicitação. Se o comprimento do conteúdo exceder
<httpRuntime maxRequestLength="size in kilo bytes" />
e você estiver usando tokens de verificação de solicitação, o navegador exibirá a'The required anti-forgery form field "__RequestVerificationToken" is not present'
mensagem em vez da mensagem excedida.Definir maxRequestLength como um valor grande o suficiente para atender à solicitação cura o problema imediato - embora eu admita que não é uma solução adequada (queremos que o usuário conheça o verdadeiro problema do tamanho do arquivo, não o de falta de tokens de verificação de solicitação).
fonte
Verifique se no seu controlador você tem seu atributo http como:
adicione também o atributo no controlador:
No seu formulário, na sua opinião, você deve escrever:
Eu tinha Html.AntiForgeryToken (); sem o sinal @ enquanto estava em um bloco de código, não deu um erro no Razor, mas ocorreu em tempo de execução. Verifique o sinal @ de @ Html.Ant .. se ele estiver ausente ou não
fonte
No meu caso, eu enviei este javascript no formulário:
Isso estava removendo o RequestVerificationToken oculto do formulário que está sendo enviado. Eu mudei isso para:
... e funcionou bem.
fonte
readonly
e excluí os controles ocultos. Parece funcionar bem.Se alguém experimenta o erro pela mesma razão pela qual o experimento, aqui está minha solução:
se você tinha
Html.AntiForgeryToken();
mude para
@Html.AntiForgeryToken()
fonte
No meu caso, o domínio incorreto no web.config para cookies foi o motivo:
fonte
No meu caso, foi devido a adição
requireSSL=true
dehttpcookies
no webconfig que fez a parada de trabalho AntiForgeryToken. Exemplo:Para fazer tanto
requireSSL=true
e@Html.AntiForgeryToken()
trabalhar eu adicionei esta linha dentro doApplication_BeginRequest
emGlobal.asax
fonte
Este erro ocorreu no Chrome com o login padrão do ASP.NET com contas de usuário individuais
.cshtml:
Controlador:
Resolvido limpando os dados do site:
fonte
Na minha solução EPiServer em vários controladores, havia um atributo ContentOutputCache na ação Index que aceitava HttpGet. Cada visualização dessas ações continha um formulário que estava sendo postado em uma ação HttpPost no mesmo controlador ou em um diferente. Assim que eu removi esse atributo de todas essas ações de índice, o problema desapareceu.
fonte
Porque isso vem com a primeira pesquisa disso:
Eu tinha esse problema apenas no Internet Explorer e não conseguia descobrir qual era o problema. Para encurtar a história, não estava salvando a parte do cookie do Token porque nosso (sub) domínio tinha um sublinhado. Funcionou no Chrome, mas o IE / Edge não gostou.
fonte
Todas as outras respostas aqui também são válidas, mas se nenhuma delas resolver o problema, também vale a pena verificar se os cabeçalhos reais estão sendo passados para o servidor.
Por exemplo, em um ambiente com balanceamento de carga atrás do nginx, a configuração padrão é remover o cabeçalho __RequestVerificationToken antes de passar a solicitação ao servidor, consulte: o proxy reverso simples do nginx parece remover alguns cabeçalhos
fonte
À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ê precisa ter dois métodos de ação com o mesmo nome. Um com
[HttpGet]
e outro com[HttpPost]
atributo.No seu
[HttpPost]
método de ação, defina o[ValidateAntiForgeryToken]
atributo e também coloque@Html.AntiForgeryToken()
no seu formulário html.fonte
No meu caso, eu estava recebendo esse erro ao fazer uma postagem no AJAX, mas o valor __RequestVerificationToken não estava sendo passado na chamada. Eu tive que encontrar manualmente o valor desse campo e configurá-lo como uma propriedade no objeto de dados que é enviado para o terminal.
ie
data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();
Exemplo
HTML
Javascript
Controlador
fonte
public class MyDto { public bool Whatever { get; set; } }
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 sempre que solicito usando $ http.post e descobri que 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) { ....
fonte