Ich benutze die Membership.create
Benutzerfunktion, dann tritt der folgende Fehler auf:
Das erforderliche Fälschungsschutzfeld "__RequestVerificationToken" ist nicht vorhanden
Wie kann ich das beheben?
asp.net-mvc-4
asp.net-membership
Hemant Soni
quelle
quelle
Html.AntiForgeryToken();
funktioniert nicht !! In@Html.AntiForgeryToken()
WerkeIn meinem Fall hatte ich dies in meiner web.config:
<httpCookies requireSSL="true" />
In meinem Projekt wurde jedoch kein SSL verwendet. Das Auskommentieren dieser Zeile oder das Einrichten des Projekts für die Verwendung von SSL löste das Problem.
quelle
IIS
gab es diese Bindung (https » EmptyHostName » IP » 443
), aber es gab keine Bindung für (https » www.mysite.com » IP » 443
). So habe ich eine neue Bindung mit einem hinzu nicht leeren Hostnamen fürhttps
das war gleich der Domäne und es löste das Problem. Ich habe Einstellungen umgeschriebenIIS
, um siehttp 2 https
auch zu erzwingen .So was:
Der Controller
Die Aussicht:
quelle
Stellen Sie außerdem sicher, dass Sie [ValidateAntiForgeryToken] nicht unter [HttpGet] verwenden.
quelle
Sie erhalten den Fehler auch dann, wenn Cookies nicht aktiviert sind.
quelle
Eine andere Sache, die dies verursachen kann (ist gerade darauf gestoßen), ist die folgende: Wenn Sie aus irgendeinem Grund alle Ihre Eingabefelder in Ihrem Formular deaktivieren. Dadurch wird das versteckte Eingabefeld deaktiviert, in dem sich Ihr Bestätigungstoken befindet. Wenn das Formular zurückgeschickt wird, fehlt der Token-Wert und generiert den Fehler, dass er fehlt. Sie müssen also das Eingabefeld, das das Bestätigungstoken enthält, wieder aktivieren, und alles wird gut.
quelle
Eine weitere Möglichkeit für diejenigen von uns, Dateien als Teil der Anfrage hochzuladen. Wenn die Inhaltslänge überschritten wird
<httpRuntime maxRequestLength="size in kilo bytes" />
und Sie Anforderungsüberprüfungstoken verwenden, zeigt der Browser die'The required anti-forgery form field "__RequestVerificationToken" is not present'
Nachricht anstelle der angeforderten Anforderungslänge an.Das Festlegen von maxRequestLength auf einen Wert, der groß genug ist, um die Anforderung zu erfüllen, behebt das unmittelbare Problem - obwohl ich zugeben werde, dass dies keine geeignete Lösung ist (wir möchten, dass der Benutzer das wahre Problem der Dateigröße kennt, nicht das der fehlenden Token für die Anforderungsüberprüfung).
quelle
Stellen Sie in Ihrem Controller sicher, dass Sie Ihr http-Attribut wie folgt haben:
Fügen Sie außerdem das Attribut im Controller hinzu:
In Ihrem Formular aus Ihrer Sicht müssen Sie schreiben:
Ich hatte Html.AntiForgeryToken (); Ohne das @ -Zeichen in einem Codeblock gab es in Razor keinen Fehler, sondern zur Laufzeit. Stellen Sie sicher, dass Sie sich das @ -Zeichen von @ Html.Ant .. ansehen, ob es fehlt oder nicht
quelle
In meinem Fall hatte ich dieses Javascript auf dem Formular einreichen:
Dadurch wurde das versteckte RequestVerificationToken aus dem übermittelten Formular entfernt. Ich habe das geändert in:
... und es hat gut funktioniert.
quelle
readonly
und die versteckten Steuerelemente ausgeschlossen. Scheint gut zu funktionieren.Wenn jemand den Fehler aus demselben Grund auftritt, aus dem ich ihn erlebe, ist hier meine Lösung:
wenn du hättest
Html.AntiForgeryToken();
ändere es auf
@Html.AntiForgeryToken()
quelle
In meinem Fall war eine falsche Domain in web.config für Cookies der Grund:
quelle
In meinem Fall war es auf das Hinzufügen
requireSSL=true
zuhttpcookies
in webconfig zurückzuführen, wodurch das AntiForgeryToken nicht mehr funktionierte. Beispiel:Um beides zu machen
requireSSL=true
und zu@Html.AntiForgeryToken()
funktionieren, habe ich diese Zeile in dasApplication_BeginRequest
In eingefügtGlobal.asax
quelle
Dieser Fehler wurde in Chrome mit der Standardanmeldung für ASP.NET mit einzelnen Benutzerkonten angezeigt
.cshtml:
Regler:
Gelöst durch Löschen von Site-Daten für die Site:
quelle
In meiner EPiServer-Lösung auf mehreren Controllern gab es ein ContentOutputCache-Attribut für die Index-Aktion, das HttpGet akzeptierte. Jede Ansicht für diese Aktionen enthielt ein Formular, das an eine HttpPost-Aktion auf demselben oder einem anderen Controller gesendet wurde. Sobald ich dieses Attribut aus all diesen Indexaktionen entfernt hatte, war das Problem behoben.
quelle
Weil dies bei der ersten Suche dazu kommt:
Ich hatte dieses Problem nur in Internet Explorer und konnte nicht herausfinden, was das Problem war. Kurz gesagt, es wurde nicht der Cookie-Teil des Tokens gespeichert, da unsere (Unter-) Domain einen Unterstrich enthielt. Arbeitete in Chrome, aber IE / Edge mochte es nicht.
quelle
Alle anderen Antworten hier sind ebenfalls gültig. Wenn jedoch keine der Antworten das Problem löst, sollten Sie auch überprüfen, ob die tatsächlichen Header an den Server übergeben werden.
In einer Umgebung mit Lastenausgleich hinter nginx besteht die Standardkonfiguration beispielsweise darin , den Header __RequestVerificationToken zu entfernen, bevor die Anforderung an den Server weitergeleitet wird. Siehe: Einfacher Nginx-Reverse-Proxy scheint einige Header zu entfernen
quelle
Manchmal schreiben Sie eine Formularaktionsmethode mit einer Ergebnisliste. In diesem Fall können Sie nicht mit einer Aktionsmethode arbeiten. Sie müssen also zwei Aktionsmethoden mit demselben Namen haben. Eins mit
[HttpGet]
und eins mit[HttpPost]
Attribut.Legen Sie in Ihrer
[HttpPost]
Aktionsmethode das[ValidateAntiForgeryToken]
Attribut fest und fügen Sie es@Html.AntiForgeryToken()
in Ihr HTML-Formular ein.quelle
In meinem Fall wurde dieser Fehler beim Erstellen eines AJAX-Posts angezeigt. Es stellte sich heraus, dass der Wert __RequestVerificationToken im Aufruf nicht weitergegeben wurde. Ich musste den Wert dieses Feldes manuell ermitteln und als Eigenschaft für das Datenobjekt festlegen, das an den Endpunkt gesendet wird.
dh
data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();
Beispiel
HTML
Javascript
Regler
quelle
public class MyDto { public bool Whatever { get; set; } }
Ich möchte meine teilen, ich habe dieses Anti-Fälschungs-Tutorial mit asp.net mvc 4 mit anglejs verfolgt, aber es löst jedes Mal eine Ausnahme aus, wenn ich mit $ http.post anfordere und herausgefunden habe, dass die Lösung einfach 'X- Requested-With ':' XMLHttpRequest ' an die Header von $ http.post, da es so aussieht, als würde der
(filterContext.HttpContext.Request.IsAjaxRequest())
es nicht als Ajax erkennen und hier ist mein Beispielcode.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) { ....
quelle