C# 在ajax请求中添加@Html.AntiForgeryToken()

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

搜索大量关于跨站点伪造的信息,并将其添加到ajax请求中。这就是我所做的

控制器

    [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()
    是否也会自动发布
  • 如果我在一个页面中有这么多ajax请求呢。我是否必须只包含一个
    @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" })