it-swarm.com.de

Das erforderliche Anti-Fälschungs-Formularfeld "__RequestVerificationToken" ist nicht vorhanden. Fehler bei der Benutzerregistrierung

Ich verwende Membership.create Benutzerfunktion, dann tritt der folgende Fehler auf,

Das erforderliche Fälschungs-Formularfeld "__RequestVerificationToken" lautet nicht vorhanden

Wie kann ich das beheben?

129
Hemant Soni

Sie haben ein [ValidateAntiForgeryToken]-Attribut vor Ihrer Aktion. Sie sollten auch @Html.AntiForgeryToken() in Ihrem Formular hinzufügen.

199
webdeveloper

In meinem Fall hatte ich dies in meiner web.config:

<httpCookies requireSSL="true" />

Mein Projekt wurde jedoch so eingestellt, dass SSL nicht verwendet wird. Wenn Sie diese Zeile auskommentieren oder das Projekt so einrichten, dass immer SSL verwendet wird, wurde das Problem gelöst.

68
Justin Skiles

So was:

Der Controller

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

Die Aussicht:

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

Stellen Sie außerdem sicher, dass Sie [ValidateAntiForgeryToken] Unter [HttpGet] nicht verwenden.

  [HttpGet]
  public ActionResult MethodName()
  {
  ..
  }
35
Haiping Fan

Sie erhalten die Fehlermeldung auch dann, wenn Cookies nicht aktiviert sind. 

7
Vijaychandar

Eine andere Sache, die dies verursachen kann (nur dazu geführt hat), ist Folgendes: Wenn Sie aus irgendeinem Grund alle Eingabefelder in Ihrem Formular deaktivieren, wird das ausgeblendete Eingabefeld deaktiviert, in dem sich Ihr Überprüfungstoken befindet Wenn das Formular zurückgegeben wird, fehlt der Tokenwert und es wird der Fehler generiert, den es fehlt. Sie müssen also das Eingabefeld wieder aktivieren, in dem sich das Überprüfungstoken befindet. Alles wird gut.

6
Roman

Eine weitere Möglichkeit für diejenigen, die Dateien als Teil der Anfrage hochladen. Wenn die Inhaltslänge <httpRuntime maxRequestLength="size in kilo bytes" /> überschreitet und Sie Anforderungsüberprüfungs-Token verwenden, zeigt der Browser die 'The required anti-forgery form field "__RequestVerificationToken" is not present'-Nachricht anstelle der Nachricht, dass die Anforderungslänge überschritten wurde.

Durch das Festlegen von maxRequestLength auf einen Wert, der groß genug ist, um die Anforderung zu erfüllen, wird das unmittelbare Problem behoben. Ich gebe jedoch zu, dass dies keine richtige Lösung ist (der Benutzer soll das wahre Problem der Dateigröße kennen, nicht das Problem der fehlenden Anforderungsüberprüfungstoken).

5
GeoffM

Vergewissern Sie sich in Ihrem Controller, dass Ihr http-Attribut wie folgt lautet:

[HttpPost]

fügen Sie auch das Attribut im Controller hinzu: 

[ValidateAntiForgeryToken]

In deinem Formular musst du schreiben:

@Html.AntiForgeryToken();

Ich hatte Html.AntiForgeryToken (); Ohne das @ -Zeichen in einem Codeblock gab es keinen Fehler in Razor, aber zur Laufzeit. Stelle sicher, dass du das @ -Zeichen von @ Html.Ant .. siehst, ob es fehlt oder nicht

4
juFo

In meinem Fall hatte ich dieses Javascript auf dem Formular abschicken:

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

Dadurch wurde das ausgeblendete RequestVerificationToken aus dem übermittelten Formular entfernt. Ich habe das geändert in:

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

... und es hat gut funktioniert.

4
Sean

Wenn jemand den Fehler aus demselben Grund erfährt, warum ich ihn erlebe, hier meine Lösung:

wenn Sie Html.AntiForgeryToken(); hätten 

ändere es in @Html.AntiForgeryToken()

3
Winnifred

In meinem Fall war eine falsche Domain in web.config für Cookies der Grund:

<httpCookies domain=".wrong.domain.com" />
2
Michael Logutov

Weil dies bei der ersten Suche aufkommt:

Ich hatte dieses Problem nur in Internet Explorer und konnte nicht herausfinden, was das Problem war. Um es kurz zu machen: Es wurde nicht der Cookie-Teil des Tokens gespeichert, da unsere (Sub-) Domäne einen Unterstrich enthielt. Funktionierte in Chrome, aber IE/Edge gefiel es nicht. 

0
dz15

In meiner EPiServer-Lösung auf mehreren Controllern gab es ein Attribut ContentOutputCache für die Index-Aktion, das HttpGet akzeptierte. Jede Ansicht für diese Aktionen enthielt ein Formular, das an eine HttpPost-Aktion an denselben Controller oder an einen anderen Controller gesendet wurde. Sobald ich dieses Attribut von all diesen Index-Aktionen entfernt hatte, war das Problem nicht mehr vorhanden.

0
Goran Sneperger

In meinem Fall wurde dieser Fehler beim Erstellen eines AJAX Posts angezeigt. Es stellte sich heraus, dass der Wert __RequestVerificationToken im Aufruf nicht übergeben wurde. Ich musste den Wert dieses Felds manuell ermitteln und als Eigenschaft für das Datenobjekt festlegen, das an den Endpunkt gesendet wurde.

d.h. data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();


Beispiel

HTML

  <form id="myForm">
    @Html.AntiForgeryToken()

    <!-- other input fields -->

    <input type="submit" class="submitButton" value="Submit" />
  </form>

Javascript

$(document).on('click', '#myForm .submitButton', function () {
  var myData = { ... };
  myData.__RequestVerificationToken = $('#myForm input[name="__RequestVerificationToken"]').val();

  $.ajax({
    type: 'POST',
    url: myUrl,
    data: myData,
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    dataType: 'json',
    success: function (response) {
      alert('Form submitted');
    },
    error: function (e) {
      console.error('Error submitting form', e);
      alert('Error submitting form');
    },
  });
  return false; //prevent form reload
});

Controller

    [HttpPost]
    [Route("myUrl")]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> MyUrlAsync(MyDto dto)
    {
        ...
    }
0
demoncodemonkey

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. Eine mit [HttpGet] und eine andere mit [HttpPost]-Attribut.

Setzen Sie in Ihrer [HttpPost]-Aktionsmethode das [ValidateAntiForgeryToken]-Attribut und fügen Sie @Html.AntiForgeryToken() in Ihr HTML-Formular ein.

0

In meinem Fall lag es daran, dass requireSSL=true zu httpcookies in webconfig hinzugefügt wurde, wodurch das AntiForgeryToken nicht mehr funktioniert. Beispiel:

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

Damit requireSSL=true und @Html.AntiForgeryToken() funktionieren, habe ich diese Zeile in Application_BeginRequest in Global.asax eingefügt.

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

Alle anderen Antworten hier sind ebenfalls gültig. Wenn jedoch keine der Antworten das Problem löst, sollte auch überprüft werden, ob die tatsächlichen Header an den Server übergeben werden.

In einer Umgebung mit Lastenausgleich hinter nginx lautet die Standardkonfiguration beispielsweise Header __RequestVerificationToken entfernen, bevor die Anforderung an den Server weitergeleitet wird. Siehe: einfacher Nginx-Reverse-Proxy scheint Kopfzeilen entfernen

0
Doug