J'utilise la Membership.create
fonction utilisateur, l'erreur suivante se produit,
Le champ obligatoire du formulaire anti-contrefaçon "__RequestVerificationToken" n'est pas présent
Comment puis-je réparer cela?
asp.net-mvc-4
asp.net-membership
Hemant Soni
la source
la source
Html.AntiForgeryToken();
ne marche pas !! Transformer en@Html.AntiForgeryToken()
œuvresDans mon cas, j'avais ceci dans mon web.config:
<httpCookies requireSSL="true" />
Mais mon projet était configuré pour ne pas utiliser SSL. Commenter cette ligne ou configurer le projet pour toujours utiliser SSL l'a résolu.
la source
IIS
il y avait cette liaison (https » EmptyHostName » IP » 443
) mais il n'y avait pas de liaison pour (https » www.mysite.com » IP » 443
). J'ai donc ajouté une nouvelle liaison avec un nom d'hôte non vide pourhttps
qui était égal au domaine et cela a résolu le problème. J'ai aussi des paramètres de réécritureIIS
pour forcerhttp 2 https
.Comme ça:
Le controlle
La vue:
la source
Assurez-vous également d'éviter de ne pas utiliser [ValidateAntiForgeryToken] sous [HttpGet].
la source
Vous recevrez l'erreur même lorsque les cookies ne sont pas activés.
la source
Une autre chose qui peut causer cela (vient de tomber sur ceci) est la suivante: si, pour une raison quelconque, vous désactivez tous vos champs de saisie dans votre formulaire. cela désactivera le champ de saisie masqué contenant votre jeton de vérification. lorsque le formulaire sera renvoyé, la valeur du jeton sera manquante et générera l'erreur qu'il manque. vous devez donc réactiver le champ de saisie contenant le jeton de vérification et tout ira bien.
la source
Une autre possibilité pour ceux d'entre nous de télécharger des fichiers dans le cadre de la demande. Si la longueur du contenu dépasse
<httpRuntime maxRequestLength="size in kilo bytes" />
et que vous utilisez des jetons de vérification de demande, le navigateur affiche le'The required anti-forgery form field "__RequestVerificationToken" is not present'
message au lieu du message de dépassement de la longueur de la demande.Définir maxRequestLength sur 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 solution appropriée (nous voulons que l'utilisateur connaisse le vrai problème de la taille du fichier, pas celui des jetons de vérification de la demande manquants).
la source
Assurez-vous dans votre contrôleur que vous avez votre attribut http comme:
ajoutez également l'attribut dans le contrôleur:
Dans votre formulaire sur votre vue, vous devez écrire:
J'avais Html.AntiForgeryToken (); sans le signe @ alors qu'il était dans un bloc de code, il n'a pas donné d'erreur dans Razor mais l'a fait au moment de l'exécution. Assurez-vous de regarder le signe @ de @ Html.Ant .. s'il manque ou non
la source
Dans mon cas, j'avais ce javascript sur le formulaire de soumission:
Cela supprimait le RequestVerificationToken masqué du formulaire soumis. J'ai changé cela en:
... et cela a bien fonctionné.
la source
readonly
et exclu les contrôles cachés. Semble bien fonctionner.Si quelqu'un rencontre l'erreur pour la même raison pour laquelle je la rencontre, voici ma solution:
si tu avais
Html.AntiForgeryToken();
changez-le en
@Html.AntiForgeryToken()
la source
Dans mon cas, un domaine incorrect dans web.config pour les cookies était la raison:
la source
Dans mon cas, cela était dû à l'ajout
requireSSL=true
dehttpcookies
webconfig qui a empêché AntiForgeryToken de fonctionner. Exemple:Pour faire les deux
requireSSL=true
et@Html.AntiForgeryToken()
travailler, j'ai ajouté cette ligne à l'intérieur duApplication_BeginRequest
inGlobal.asax
la source
Vous avez cette erreur dans Chrome avec la connexion par défaut pour ASP.NET avec des comptes d'utilisateurs individuels
.cshtml:
Manette:
Résolu en effaçant les données du site pour le site:
la source
Dans ma solution EPiServer sur plusieurs contrôleurs, il y avait un attribut ContentOutputCache sur l'action Index qui acceptait HttpGet. Chaque vue de ces actions contenait un formulaire qui publiait sur une action HttpPost sur le même contrôleur ou sur un autre. Dès que j'ai supprimé cet attribut de toutes ces actions d'index, le problème a disparu.
la source
Parce que cela vient avec la première recherche de ceci:
J'ai eu ce problème uniquement dans Internet Explorer et je n'ai pas pu comprendre quel était le problème. En bref, il ne sauvegardait pas la partie cookie du Token car notre (sous) domaine contenait un trait de soulignement. Travaillait dans Chrome mais IE / Edge ne l'aimait pas.
la source
Toutes les autres réponses ici sont également valides, mais si aucune d'elles ne résout le problème, il vaut également la peine de vérifier que les en-têtes réels sont transmis au serveur.
Par exemple, dans un environnement à charge équilibrée derrière nginx, la configuration par défaut consiste à supprimer l'en-tête __RequestVerificationToken avant de transmettre la requête au serveur, voir: un simple proxy inverse nginx semble supprimer certains en-têtes
la source
Parfois, vous écrivez une méthode d'action de formulaire avec une liste de résultats. Dans ce cas, vous ne pouvez pas utiliser une seule méthode d'action. Vous devez donc avoir deux méthodes d'action avec le même nom. Un avec
[HttpGet]
et un autre avec[HttpPost]
attribut.Dans votre
[HttpPost]
méthode d'action, définissez l'[ValidateAntiForgeryToken]
attribut et mettez également@Html.AntiForgeryToken()
votre formulaire html.la source
Dans mon cas, j'obtenais cette erreur lors de la création d'un message AJAX, il s'est avéré que la valeur __RequestVerificationToken n'était pas transmise dans l'appel. Je devais trouver manuellement la valeur de ce champ et le définir comme propriété sur l'objet de données envoyé au point de terminaison.
c'est à dire
data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();
Exemple
HTML
Javascript
Manette
la source
public class MyDto { public bool Whatever { get; set; } }
Je voudrais partager le mien, j'ai suivi ce tutoriel anti-faux jeton en utilisant asp.net mvc 4 avec angularjs, mais il lève une exception chaque fois que je demande en utilisant $ http.post et j'ai compris que la solution était simplement d'ajouter 'X- Requested-With ':' XMLHttpRequest ' aux en-têtes de $ http.post, car il semble que le
(filterContext.HttpContext.Request.IsAjaxRequest())
ne le reconnaisse pas comme ajax et voici mon exemple de code.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) { ....
la source