2017-09-28 7 views
1

Ich verwende jQuery DataTales, um eine POST-URL von MVC5 anzufordern und ein Anti-Fälschungs-Token hinzuzufügen. Ich habe es sowohl den Headern als auch dem Anfragetext hinzugefügt, bekomme aber immer noch einen Fehler von 500: "Das erforderliche Anti-Fälschungs-Formularfeld" __RequestVerificationToken "ist nicht vorhanden."__RequestVerificationToken ist nicht vorhanden mit Ajax POST

Die Form:

<form id="my-units-form" action="@Url.Action("MyUnitsResults", "Provider")" class="form-horizontal criteria well well-sm"> 
    @Html.AntiForgeryToken() 
    .... 

Das JavaScript:

$userDt = $('#users-table') 
    .DataTable({ 
     serverSide: true, 
     ordering: false, 
     searching: true, 
     ajax: { 
      "url": url, 
      "type": "POST", 
      'contentType': 'application/json', 
      "dataType": "json", 
      headers: { '__RequestVerificationToken': $('form input[name=__RequestVerificationToken]').val() }, 
      data: function (d) { 
       d.__RequestVerificationToken= $('form input[name=__RequestVerificationToken]').val(); 

       return JSON.stringify(d); 
      } 
     }, 

Headers

Payload

Antwort

0

Wenn yo ur string die Daten und mit contentType: 'application/json, dann fügen Sie das Token nur die Ajax-Header (es wird nicht aus dem Körper gelesen werden).

Sie dann müssen Sie eine benutzerdefinierte FilterAttribute erstellen Sie den Wert aus den Headern

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] 
public sealed class ValidateHeaderAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException("filterContext"); 
     } 

     var httpContext = filterContext.HttpContext; 
     var cookie = httpContext.Request.Cookies[AntiForgeryConfig.CookieName]; 
     AntiForgery.Validate(cookie != null ? cookie.Value : null, httpContext.Request.Headers["__RequestVerificationToken"]); 
    } 
} 

und in Ihrem Controller-Methode zu lesen, ersetzen Sie das [ValidateAntiForgeryToken] Attribut mit [ValidateHeaderAntiForgeryToken]

+0

Excellent! Vielen Dank. – Echilon

Verwandte Themen