大量搜索跨站点伪造并将其添加到ajax请求中。所以这就是我所做的。
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id = 0)
{
// Do something here
if (Request.IsAjaxRequest())
return new HttpStatusCodeResult(HttpStatusCode.OK);
return RedirectToAction("Index");
}
JS
$(function () {
$(".delete").click(function () {
var bool = confirm("Are you sure?");
var $link = $(this);
if (!bool) return false;
var token = $('input[name="__RequestVerificationToken"]').val();
var data = {};
data['__RequestVerificationToken'] = token;
$.post($(this).attr("href"), data)
.done(function () {
$link.closest("tr").fadeOut();
});
return false;
});
});
查看
@Html.AntiForgeryToken()
@Html.ActionLink("Delete", "Delete", new { id = model.Id }, new { @class = "delete" })
虽然有效,但我的问题是......
@Html.AntiForgeryToken()
会自动发布吗?@Html.AntiForgeryToken()
?答案 0 :(得分:2)
问:我做得对吗?
答:是的,这就是你应该这样做的方式。
问:在表单中包含@ Html.AntiForgeryToken()是否会自动发布?
答:是的,因为它是输入类型,因此在提交表单时它包含在表单集合中。
问:如果我在一个页面中有这么多的ajax请求怎么办?我是否必须只包含一个@ Html.AntiForgeryToken()?
答:只需要为整个页面使用一个令牌就足够了。
问:如果你有更简单的方法,请发布或这是最简单的方法
答:这是最简单的方法,你应该尝试通过从DOM获取令牌并将其设置为可重用的数据集合(通过将其移动到单独的函数)来连接代码。