I have following jQuery code which posts data with JSON.stringify to ASP.NET MVC controller class. Everything works fine without the introduction of the AntiForgeryToken. Now when I start implementing the AntiForgeryToken within the code base it is not working and throwing an error: The required anti-forgery form field "__RequestVerificationToken" is not present.
HTML
<form action="javascript: void(0)" id="frmMain">
@Html.AntiForgeryToken()
....
</form>
jQuery Code:
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 });
}
}
Can any one help me here by providing their guidance to fix this issue