Pregunta

Tengo un formulario HTML, a lo que agrega dinámicamente un campo de texto y realizar una solicitud POST para esa forma a través de jQuery a un controlador ASP.NET MVC.

Si invoco la solicitud POST sin el atributo ValidateAntiForgeryToken en la acción del controlador, que funciona bien. Pero, cuando agrego el atributo ValidateAntiForgeryToken a la acción consigo la siguiente excepción:

"Un token anti-falsificación requerida no fue suministrado o no es válida."

¿Alguien alguna idea de por qué esto podría ser?

Uno de los puntos de la nota es que el ID de símbolo en la cookie parece ser completamente diferente al token dictada en el formulario. ¿Por qué podrían éstos ser diferente?

La acción:

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

La forma (como prestados):

<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>

La vista original haciendo que el contador anti-falsificación:

<form id="slider" class="fc" method="post" action="/controller/myaction/" name="tabEdit">
<%=Html.AntiForgeryToken(OurNamespace.MVC.Constants.SaltValue) %>
  <ul class="noJs">
<!-- etc -->       
  </ul>
</form>
¿Fue útil?

Solución

Está especificando una sal de costumbre cuando se genera el AntiForgeryToken, es necesario proporcionar esta sal a la ValidateAntiForgeryToken atribuir también.

[ValidateAntiForgeryToken(Salt=OurNamespace.MVC.Constants.SaltValue)]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top