2017-09-28 29 views
1

jQuery DataTalesを使用して、MVC5からPOST URLを要求し、偽造トークンを追加しようとしています。私はそれをヘッダーとリクエスト本体の両方に追加しましたが、依然として500エラーが表示されます:「必要な反偽造フォームフィールド「__RequestVerificationToken」は存在しません。__RequestVerificationTokenがAjax POSTに存在しません

形式:

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

は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

答えて

0

ヨーヨーの場合データをストリング化してcontentType: 'application/jsonを使用して、トークンをajaxヘッダーにのみ追加します(本文からは読み取られません)。

あなたは、あなたは[ValidateHeaderAntiForgeryToken]

+0

優秀で[ValidateAntiForgeryToken]属性を置き換え、ヘッダ

[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"]); } } 

とあなたのコントローラメソッド内から値を読み取るために、カスタムFilterAttributeを作成する必要があります!ありがとう。 – Echilon

関連する問題