当前位置: 首页 > 知识库问答 >
问题:

在ajax后ASP.NET MVC中包含antiforgerytoken

庄实
2023-03-14
var data = { ... } // with token, key is '__RequestVerificationToken'

$.ajax({
        type: "POST",
        data: data,
        datatype: "json",
        traditional: true,
        contentType: "application/json; charset=utf-8",
        url: myURL,
        success: function (response) {
            ...
        },
        error: function (response) {
            ...
        }
    });

antiforgerytoken是在表单内生成的,但我没有使用提交操作来提交它。相反,我只是使用jquery获取令牌的值,然后尝试用ajax发布该值。

下面是包含令牌的表单,位于顶部母版页:

<form id="__AjaxAntiForgeryForm" action="#" method="post">
    @Html.AntiForgeryToken()
</form>

共有1个答案

壤驷德寿
2023-03-14

您将ContentType错误地指定为application/json

这里有一个例子来说明这可能是如何工作的。

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Index(string someValue)
    {
        return Json(new { someValue = someValue });
    }
}
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "__AjaxAntiForgeryForm" }))
{
    @Html.AntiForgeryToken()
}

<div id="myDiv" data-url="@Url.Action("Index", "Home")">
    Click me to send an AJAX request to a controller action
    decorated with the [ValidateAntiForgeryToken] attribute
</div>

<script type="text/javascript">
    $('#myDiv').submit(function () {
        var form = $('#__AjaxAntiForgeryForm');
        var token = $('input[name="__RequestVerificationToken"]', form).val();
        $.ajax({
            url: $(this).data('url'),
            type: 'POST',
            data: { 
                __RequestVerificationToken: token, 
                someValue: 'some value' 
            },
            success: function (result) {
                alert(result.someValue);
            }
        });
        return false;
    });
</script>
 类似资料:
  • 问题内容: 我在使用Ajax的AntiForgeryToken时遇到麻烦。我正在使用ASP.NET MVC3。我在jQueryAjax调用和Html.AntiForgeryToken()中尝试了该解决方案。使用该解决方案,令牌现在可以通过: 当我删除该属性只是为了查看数据(带有令牌)是否作为参数传递给控制器​​时,我可以看到它们正在传递。但是由于某种原因,当我放回属性时,消息仍然弹出。 有任何想法

  • 问题内容: 我在Internet Explorer中的页面出现问题。我有一个Ajax调用,在其他浏览器中,当我单击该链接时,该调用会传递到控制器中并正确加载数据。但是在IE中,一次加载后,它消失了,而我却没有通过控制器就获得了相同的旧结果。 问题答案: 尝试: 放置在控制器类中的此属性禁用缓存。由于不需要在应用程序中缓存,因此将其放置在BaseController类中: 这是有关OutputCac

  • 问题内容: 我有以下代码: 我想在不使用JavaScript的情况下将验证令牌添加到链接中,这似乎是多余的依赖项,因为我已经在服务器中拥有该值。有适当的方法吗? 问题答案: 从MSDN文档(我的重点) HtmlHelper.AntiForgeryToken方法 生成一个隐藏的表单字段(防伪令牌),该表单字段在提交 表单 时经过验证。 您需要一个form元素来生成防伪令牌。

  • 我试图通过Ajax调用将jsp页面包含在另一个页面中。问题是,如果要包含的页面在html元素之间有一些空格,它将使插入失败。 例如,下面是我的演示index.jsp: 下面是要包含的 hello.jsp 页面(元素标记之间没有空格,否则包含将失败): 而这个 servlet 只有一个什么都不做(目前)doGet 方法。 对你们所有人来说都是一样的吗?我的代码有问题吗?是否有其他工作方式来完成相同的

  • 当我通过Ajax重新加载Datatable时,我不断得到“UncaughtTypeError:无法读取null的属性'aoData'。我基本上有一个主数据表(表1),每行有一个链接,其中包含一个包含另一个数据表的弹出模式。(我使用PHP填充模态和内部表的特定类和id,以确保它们都保持唯一。)下面是解释我所说内容的代码: 位于modals内部的数据表行可以通过ajax进行添加、删除和编辑。在我运行a

  • 我想构建一个剑道UI网格,格式为dd//MM/yyyy。然而,我发现的所有问题都是用代码格式(“{0:d}”);解决的;。因此,我尝试了以下代码: 另一种格式很好用,只是DateTime不起作用。 我有这个结果为Datetime= /Date(1377020142000)/