C# 在ajax请求中添加@Html.AntiForgeryToken()
搜索大量关于跨站点伪造的信息,并将其添加到ajax请求中。这就是我所做的 控制器C# 在ajax请求中添加@Html.AntiForgeryToken(),c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,搜索大量关于跨站点伪造的信息,并将其添加到ajax请求中。这就是我所做的 控制器 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Delete(int id = 0) { // Do something here if (Request.IsAjaxRequest()) return new HttpStatusCodeResult(Htt
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id = 0)
{
// Do something here
if (Request.IsAjaxRequest())
return new HttpStatusCodeResult(HttpStatusCode.OK);
return RedirectToAction("Index");
}
JS
看法
它奏效了,但我的问题是
@Html.AntiForgeryToken()
是否也会自动发布@Html.AntiForgeryToken()
Q:我做得对吗? 是的,你应该这样做 Q:在表单中包含@Html.AntiForgeryToken()是否也会自动发布? 答:是的,因为它是输入型的,所以在提交表单时会包含在表单集合中 Q:如果我在一个页面中有这么多ajax请求呢。我是否必须只包含一个@Html.AntiForgeryToken() 答:整个页面只使用一个令牌就足够了 Q:如果你有更简单的方法,请发布,或者这是最简单的方法
答:这是最简单的方法,但是您应该尝试使代码与从DOM获取令牌并将其设置为数据集合的可重用性相连接(通过将其移动到单独的函数) 你认为你能就第四个问题举个例子吗?我真的很想知道是怎么做到的。
$(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" })