【发布时间】:2015-05-11 18:50:05
【问题描述】:
我正在使用防伪令牌保护我的应用程序免受跨站点脚本攻击 开发环境为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 为空 如果我删除了防伪令牌,那么控制器会正确接收数据
如何将防伪令牌与 JSON 数据一起使用?
【问题讨论】:
-
您的方法缺少 [HttpPost] 属性。
-
我已经检查了那个问题。不同之处在于,在该示例中,仅传递了一个 int 类型的参数。就我而言,我正在发送对象。
-
添加了[HttpPost]后还是不行
标签: json asp.net-mvc-4 antiforgerytoken