2013-10-08 114 views
0

我在ASP.NET MVC4應用程序中工作,因此,通過ajax發送到服務器的所有陣列數據都必須使用traditional選項發送。 (對於POST變量,沒有[])。

問題是,我也有一個過濾器設置,要求每個ajax POST都發送AntiforgeryToken。

我一直在使用這個固定的ajaxPrefilter這樣的:

$.ajaxPrefilter(function (options, originalOptions) { 
    if (options.type.toUpperCase() == "POST") { 
    options.data = $.param($.extend(originalOptions.data, { __RequestVerificationToken: "antiForgeryToken" })); 
    } 
}); 

這個偉大的工程,並增加了__RequestVerificationToken所有訊息。 但是,它也會導致我的數據根據​​traditional標誌未被參數化。

是否有人知道如何修改我的前置過濾器來解決這個問題?

例子可以在這裏找到: http://jsbin.com/IxoKIKA/2/edit

+0

你爲什麼使用反僞造令牌的AJAX?這完全是無關緊要的。改爲使用適當的頭部來驗證它的ajax。 –

+0

@BenjaminGruenbaum有一個'IFilterProvider',它爲所有POST請求添加一個'ValidateAntiForgeryTokenAttribute'',包括ajax調用。我想我可以檢查特定的POST是否是XHR調用,而不是基於此添加它。 – Kippie

回答

2

你忘了traditional參數傳遞給$.param()。你應該寫:

options.data = $.param($.extend(originalOptions.data, { 
    __RequestVerificationToken: "antiForgeryToken" 
}), true); 
+0

奇怪的是我錯過了那個選項。猜猜我太在意''.extend''了。謝謝您的幫助。 – Kippie