Я защищаю свое приложение от межсайтовых сценариев, используя маркер защиты от подделки. Среда разработки: VS 2012, MVC4, нокаут.
Я разместил токен защиты от подделки следующим образом
<form id="__AjaxAntiForgeryForm" action="#" method="post"><%= Html.AntiForgeryToken()%></form>
В моем вызове ajax я также хочу отправить данные. Мой вызов ajax выглядит следующим образом
$.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);
}
})
};
Мой код контроллера выглядит следующим образом
[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);
}
В контроллере значение параметра whichTab получено, но oTaskData равно null. Если я удалю токен защиты от подделки, данные будут правильно получены в контроллере.
Как я могу использовать токен защиты от подделки вместе с данными JSON?