0
我有以下jQuery代碼將數據與JSON.stringify一起發送到ASP.NET MVC控制器類。一切工作正常,沒有AntiForgeryToken的介紹。現在,當我開始在代碼庫中實施AntiForgeryToken時,它不起作用並拋出一個錯誤:所需的防僞表單字段「__RequestVerificationToken」不存在。在JSON發佈請求中傳遞AntiForgeryToken JSON.stringify不起作用
HTML
<form action="javascript: void(0)" id="frmMain">
@Html.AntiForgeryToken()
....
</form>
jQuery代碼:
function saveDetails() {
var testViewModel = {};
testViewModel.ArticleType = $("#SubType").val()
testViewModel.PublishedDate = $("#publishDate").val();
var token = $('#frmMain input[name=__RequestVerificationToken]').val();
var languages = [];
$.each($('#language').val(), function (index, value) {
var languageContent = {};
languageContent.Language = value;
languageContent.Author = $("#author-" + value).val();
languageContent.TeaserText = $("#teaser-" + value).val();
languageContent.body = $("#content-" + value).val();
languageContent.Title = $("#title-" + value).val();
languages.push(languageContent);
});
testViewModel.LanguageContent = languages;
testViewModel.Author = testViewModel.LanguageContent[0].Author;
testViewModel.ArticleId = aId;
$.ajax({
type: "POST",
url: "@Url.Action("SaveDetails", "Test")",
data: JSON.stringify({ articleViewModel: articleViewModel, __RequestVerificationToken: token }),
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
success: function (data) {
var url = "@Url.Action("SiteDetails", "Test")";
window.location.href = url + "?ArticleId=" + aId;
}
});
}
TestController.cs
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult SaveDetails([Bind(Include = "ArticleId,PublishedDate,Author,ArticleType,LanguageContent")]TestObject testViewModel)
{
if (!ModelState.IsValid)
{
return Json(new { success = false });
}
}
任何一個可以幫助我在這裏通過提供他們的指導來解決這個問題
刪除json和stringify,只是發佈數據原因是 – Nkosi
請參閱[本答案](https://stackoverflow.com/questions/45773645/the-required-anti-forgery-form-field-requestverificationtoken-is-not -present/45777177#45777177)。但是,對於具有這些'id'屬性的集合生成表單控件的事實表明,你做這一切都是錯誤的。 –
而你使用ajax提交一個然後重定向的事實是毫無意義的。只要生成您的視圖正確(參考[這個答案](http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943)爲集合生成表單控件,或[這一個](http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308)如果動態添加控件),並進行正常提交併在POST方法中重定向 –