문제

HTML 양식을 가지고 있는데, 여기에는 텍스트 필드를 동적으로 추가하고 jQuery를 통해 ASP.NET MVC 컨트롤러로 해당 양식에 대한 게시물 요청을 수행합니다.

컨트롤러 동작에서 validateantiforgeryToken 속성없이 게시물 요청을 호출하면 제대로 작동합니다. 그러나 동작에 validateantiforgeryToken 속성을 추가하면 다음과 같은 예외가 발생합니다.

"필수 잊혀진 토큰은 공급되지 않았거나 유효하지 않았다."

이것이 왜 그런지에 대한 아이디어가 있습니까?

주목할만한 점은 쿠키의 토큰 ID가 양식으로 렌더링 된 토큰과 완전히 다른 것으로 보입니다. 왜 이것들이 다를 수 있습니까?

행동 :

[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
public string MyAction(Guid id, Dto dto)
{            
  //return JSON;
}  

양식 (렌더링 된대로) :

<form id="slider" class="fc" method="post" action="/controller/myaction/" name="tabEdit">
  <span id="slider_previous" class="sprite" tabindex="0" title="foo">Previous</span>
  <input type="hidden" value="mzyg7UWQrHwafoSuoJBvwfraQEtCTAmM9QHYeyMSrAHFHG10BNXM+I2yNgz8zQ8yu/E43eF3yMuHX7YIQwmK3Q==" name="__RequestVerificationToken"/>
  <div id="sliderWrap" style="width: 31.243%;">
    <ul class="sliderList">
      <li id="ID_3d031daf-a7f9-46f2-b4b9-7c9fc6560e3d">
      </li>
      <li id="ID_78b61634-d88a-4f33-8e48-e0655ad8a958" class="current">
        <input class="sliderInput" type="text" value="" name="Bar"/>
        <a class="sprite" href="/a/b/78b61634-d88a-4f33-8e48-e0655ad8a958">Delete</a>
      </li>
    </ul>
  </div>
<span id="slider_addNew" class="sprite" tabindex="0" title="Add new">New</span>
<span id="slider_next" class="sprite" tabindex="0" title="See next">Next</span>
</form>

원래보기는 황홀한 토큰을 렌더링합니다.

<form id="slider" class="fc" method="post" action="/controller/myaction/" name="tabEdit">
<%=Html.AntiForgeryToken(OurNamespace.MVC.Constants.SaltValue) %>
  <ul class="noJs">
<!-- etc -->       
  </ul>
</form>
도움이 되었습니까?

해결책

antiforgeryToken을 생성 할 때 사용자 정의 소금을 지정하고 있으며,이 소금을 ValidAteAntiforgeryToken 속성에도 제공해야합니다.

[ValidateAntiForgeryToken(Salt=OurNamespace.MVC.Constants.SaltValue)]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top