Ich habe unseren MVC-Code von Version 2.0 auf 4.0 aktualisiert. Und jetzt erhalte ich den folgenden Fehler: "Ein erforderliches Anti-Fälschungs-Token wurde nicht geliefert oder war ungültig."AntiForgeryToken ist ungültig
Ich füge den Code unten in ValidateAntiForgeryTokenAttribute.cs:
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
string httpMethodOverride = filterContext.HttpContext.Request.GetHttpMethodOverride();
if (!this.verbs.Verbs.Contains(httpMethodOverride, StringComparer.OrdinalIgnoreCase))
{
return;
}
AntiForgeryDataSerializer antiForgeryDataSerializer = new AntiForgeryDataSerializer();
AntiForgeryData antiForgeryData = new AntiForgeryData();
string fieldName = antiForgeryData.GetAntiForgeryTokenName(null);
string cookieName = antiForgeryData.GetAntiForgeryTokenName(filterContext.HttpContext.Request.ApplicationPath);
HttpCookie cookie = filterContext.HttpContext.Request.Cookies[cookieName];
if (cookie == null || String.IsNullOrEmpty(cookie.Value))
{
throw CreateValidationException();
}
AntiForgeryData cookieToken = antiForgeryDataSerializer.Deserialize(cookie.Value);
//Rest of the code here//
}
In "filterContext", die Cookie-Namen "_RequestVerificationToken" ist und dann füge ich den Pfadnamen. Der Pfadname wird in Base64 codiert und zum "AntiForgeryFieldName" hinzugefügt, und dies wird "_RequestVerificationToken_Lw__". Wenn wir überprüfen, ob der Cookie existiert, können wir ihn offensichtlich nicht finden und erhalten die AntiForgery-Ausnahme. Aber in der alten Version dieses Codes kommt der Cookie-Wert in "filterContext" als "_RequestVerificationToken_Lw__" und funktioniert daher gut. Also, wo ist das Problem hier? Ist es etwas mit Maschinentasten oder etwas anderes?
Vielen Dank im Voraus.
Ich bin mir nicht ganz sicher, ob ich verstehe, was Sie hier tun. Anti-Fälschung ist in MVC integriert. Du brauchst kein eigenes Attribut. Verwenden Sie einfach das integrierte Attribut "ValidationAntiForgeryToken" für Ihre Controller-Aktion und "@ Html.AntiForgeryToken()" in Ihrer Ansicht. –