2017-09-28 1 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() 
    .... 

자바 스크립트 :

$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을 사용하여 아약스 헤더에만 토큰을 추가하십시오 (본문에서 읽지는 않습니다).

당신은 다음 헤더

[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를 작성해야, [ValidateHeaderAntiForgeryToken]

+0

우수한으로 [ValidateAntiForgeryToken] 속성을 대체! 감사. – Echilon

관련 문제