156 votes

Le champ obligatoire du formulaire anti-falsification "__RequestVerificationToken" n'est pas présent Erreur lors de l'enregistrement de l'utilisateur

J'utilise Membership.create l'erreur suivante se produit,

Le champ requis du formulaire anti-falsification "__RequestVerificationToken" n'est pas pas présent

Comment puis-je résoudre ce problème ?

9voto

Roman Points 11

Une autre chose qui peut causer ce problème (je viens de le rencontrer) est la suivante : si, pour une raison quelconque, vous désactivez tous les champs de saisie de votre formulaire. cela désactivera le champ de saisie caché qui contient votre jeton de vérification. Lorsque le formulaire sera renvoyé, la valeur du jeton sera manquante et générera une erreur indiquant qu'elle est manquante. Vous devez donc réactiver le champ de saisie qui contient le jeton de vérification et tout ira bien.

8voto

GeoffM Points 956

Une autre possibilité pour ceux d'entre nous qui téléchargent des fichiers dans le cadre de la demande. Si la longueur du contenu dépasse <httpRuntime maxRequestLength="size in kilo bytes" /> et vous utilisez des jetons de vérification des requêtes, le navigateur affiche l'icône 'The required anti-forgery form field "__RequestVerificationToken" is not present' au lieu du message de dépassement de la longueur de la requête.

Le fait d'attribuer à maxRequestLength une valeur suffisamment grande pour répondre à la demande résout le problème immédiat - même si j'admets que ce n'est pas une bonne solution (nous voulons que l'utilisateur connaisse le véritable problème de la taille du fichier, et non celui de l'absence de jetons de vérification de la demande).

7voto

Sean Points 1468

Dans mon cas, j'avais ce javascript sur le formulaire de soumission :

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

Il s'agissait de supprimer le RequestVerificationToken caché dans le formulaire soumis. J'ai changé cela en :

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

... et cela a bien fonctionné.

6voto

juFo Points 3779

Assurez-vous que dans votre contrôleur vous avez votre attribut http comme :

[HttpPost]

ajoutez également l'attribut dans le contrôleur :

[ValidateAntiForgeryToken]

Dans votre formulaire, sur votre avis, vous devez écrire :

@Html.AntiForgeryToken();

J'avais Html.AntiForgeryToken() ; sans le signe @ alors qu'il était dans un bloc de code, cela ne donnait pas d'erreur dans Razor mais en donnait au moment de l'exécution. Vérifiez que le signe @ de @Html.Ant. est manquant ou non.

6voto

Ege Bayrak Points 410

Dans mon cas, cela était dû à l'ajout de requireSSL=true a httpcookies dans webconfig qui a fait que l'AntiForgeryToken ne fonctionne plus. Exemple :

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true"/>
</system.web>

Pour que les deux requireSSL=true y @Html.AntiForgeryToken() j'ai ajouté cette ligne à l'intérieur du Application_BeginRequest en Global.asax

    protected void Application_BeginRequest(object sender, EventArgs e)
  {
    AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X