2014-12-15 12 views
5

Ho trovato molti esempi che dimostrano come aggiungere un AntiForgeryToken alla chiamata Ajax per il metodo di invio POST. Il mio bisogno, come suggerisce il titolo, è di inviare un modulo NOT tramite la chiamata ajax. Invece, sto semplicemente usando la funzione jQuery submit().Aggiunta di AntiForgeryToken al modulo non Ajax Invia

Quello che ho nel mio file vista rasoio è la seguente (Nota: sto usando stringa HTML letterale, perché questo particolare DOM ha bisogno di essere collegato dinamicamente ad un elemento separato in un momento successivo):

var html = 
    "<form id='exportPdfForm' action='" + exportUrl + "' method='post'>" + 
     "<input type='hidden' id='exportContent'>" + 
     "<input type='hidden' id='__RequestVerificationToken' value='@Html.AntiForgeryToken()'>" + 
    "</form>"; 

E, ovviamente, sto utilizzando la seguente jQuery per inviare questo modulo:

$("#exportPdfForm").submit(); 

Inoltre, utilizzando il DOM Explorer posso vedere il valore AntiForgeryToken è posizionato correttamente: enter image description here

Tuttavia, quando invio effettivamente il modulo, si verifica ancora l'errore The required anti-forgery form field "__RequestVerificationToken" is not present. Ho controllato diversi altri Q & A ma non riesco a trovare nulla che possa far luce sul mio problema.

Mi manca qualcosa di ovvio o qualcosa di sbagliato qui?

EDIT (Soluzione)

Assegnazione del __RequestVerificationToken all'attributo name lo risolverà:

<input type='hidden' name='__RequestVerificationToken' value='...'> 

risposta

3

Questo risulta essere uno di quelli "Come ho fatto a perdere che ... ?!" momenti. Mentre l'approccio sopra è perfettamente legittimo, l'unico problema è che lo __RequestVerificationToken deve appartenere a un attributo name anziché a un id come nel mio esempio iniziale. Ho provato a pubblicare il mio modulo con la correzione e ora il problema non c'è più.

Ovviamente questo non sarebbe stato un problema in primo luogo se potessi semplicemente usare l'espressione <% Html.AntiForgeryToken(); %>, ma questo caso particolare richiedeva un approccio non convenzionale per il motivo che ho affermato nel mio post iniziale. Quindi, immagino che questo sia qualcosa a cui badare!

Problemi correlati