I am securing my application against cross-site scripting using anti forgery token Development environment is VS 2012, MVC4, knockout
I have placed anti-forgery token as follows
<form id="__AjaxAntiForgeryForm" action="#" method="post"><%= Html.AntiForgeryToken()%></form>
In my ajax call I also want to send data. My ajax call is as follows
$.ajax({
url: VirtualDir + '/Tasks/StartTask/',
asynch: false,
type: 'POST',
data: { "__RequestVerificationToken": token, oTaskData: JSON.stringify(item), whichTab: self.CurrentTab },
success: function (data) {
InitializeData(data);
self.LoadData(data);
}
})
};
My controller code is as follows
[ValidateAntiForgeryToken]
[Authorize]
public JsonResult StartTask(TaskData oTaskData, string whichTab)
{
int TaskID = oTaskData.TaskID;
int LoggedInEmployeeID = Convert.ToInt32(System.Web.HttpContext.Current.Session["EmployeeID"]);
TaskRepository oTaskRepository = new TaskRepository();
return Json(oTaskRepository.TaskChangeStatus(TaskID, LoggedInEmployeeID, TaskConstants.IN_PROGRESS, whichTab), JsonRequestBehavior.AllowGet);
}
In controller, value of whichTab parameter is received but oTaskData is null If I remove anti-forgery token then data is received properly in controller
How can I use antiforgery token along with JSON data?