Domanda

Ho un modulo HTML, a cui aggiungo dinamicamente un campo di testo e di eseguire una richiesta POST per quella forma tramite jQuery per un controller ASP.NET MVC.

Se invoco la richiesta POST senza l'attributo ValidateAntiForgeryToken sulla azione di controllo, funziona benissimo. Ma, quando aggiungo l'attributo ValidateAntiForgeryToken all'azione ottengo la seguente eccezione:

"Una richiesta di token anti-contraffazione non è stato fornito o era non valido."

Qualcuno tutte le idee sul motivo per cui questo potrebbe essere?

Un punto di nota è che l'ID token nel biscotto sembra essere completamente diverso al token reso in forma. Perché questi potrebbero essere differenti?

L'azione:

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

La forma (come resa):

<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 originale rendendo il token anti-contraffazione:

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

Soluzione

si sta specificando un sale personalizzato quando si genera l'AntiForgeryToken, è necessario fornire questo sale al ValidateAntiForgeryToken attribuire pure.

[ValidateAntiForgeryToken(Salt=OurNamespace.MVC.Constants.SaltValue)]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top