问题描述: 在使用ASP.NET的AntiForgery特性时,可能会遇到"AntiforgeryToken报告对象为空"的错误。
解决方法:
确保在使用AntiForgery特性的Action方法上添加了[ValidateAntiForgeryToken]特性。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult MyAction()
{
// Action代码
}
确保在表单中包含了@Html.AntiForgeryToken()方法。
确保在发送POST请求时,表单数据中包含了__RequestVerificationToken字段,并且值与服务器生成的Token匹配。
如果在使用Ajax发送POST请求时遇到了该错误,需要在Ajax请求中添加请求头部信息,并将Token值传递给服务器。
var token = $('input[name="__RequestVerificationToken"]').val();
$.ajax({
url: '/Controller/Action',
type: 'POST',
data: { __RequestVerificationToken: token, /* 其他数据 */ },
headers: { 'RequestVerificationToken': token },
success: function (response) {
// 处理响应
}
});
确保在使用AntiForgery特性的Action方法中,通过[ValidateAntiForgeryToken]特性检查了请求中的Token值。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult MyAction(MyModel model)
{
if (!ModelState.IsValid)
{
// 模型验证失败
return BadRequest();
}
// 处理请求
}
通过以上方法,应该能够解决"ASP.NET antiforgerytoken 报告对象为空"的问题。