0

AntiforgeryToken()我在 Mvc 项目中有一个有价值的表单。ValidateAntiforgeryToken在提交表单时,它使用MvC 项目中 相应的控制器 Post 操作进行验证。

它进入确认页面。在有两个隐藏表单的按钮的确认中,这将转到上面前面相同的 Post 操作。我已经添加Html.Antiforgerytoken()了两个隐藏的表单。单击按钮时,我们不需要 Form Post[page reload],而不是这个 Using Ajax post。

我曾尝试使用 Ajax 发布(使用Antiforgerytoken),但它没有命中发布操作。显示 404 错误。

您能否建议如何启用AntiforgryToken使用 Ajax 帖子?为此,什么类型的代码句柄以及它在哪里添加?

表格详情:

 <form  method="post" action="">
     @Html.AntiForgeryToken()
     <input type="hidden" name="Name" value="@downloadInfo.Name" />
     <input type="hidden" name="Company" value="@downloadInfo.Company" />
     <input type="hidden" name="Email" value="@downloadInfo.Email" />
     <input type="hidden" name="Phone" value="@downloadInfo.Phone" />
 </form>  

阿贾克斯邮报:

$.ajax({     
    url: url,
    type: 'POST',
    data: JSON.stringify(Formdatas),
    contentType: 'application/json; charset=utf-8',
    beforeSend: showLoadingGraphic(id),
    success: onSuccessfulPost
});
4

2 回答 2

1

如果您收到不是来自令牌的 404,则说明您的 URL 或方法无效。您正在将您的令牌包含在您的 ajax 表单帖子中,因此请使用 Fiddler 工具查看请求的 URL 并首先修复它。

我猜您使用“URL”的 Ajax 调用不正确

于 2013-04-03T07:03:07.650 回答
0

尝试生成应有的表单(使用 Html.BeginForm 帮助器):

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
    @Html.AntiForgeryToken()
    <input type="hidden" name="Name" value="@downloadInfo.Name" />
    <input type="hidden" name="Company" value="@downloadInfo.Company" />
    <input type="hidden" name="Email" value="@downloadInfo.Email" />
    <input type="hidden" name="Phone" value="@downloadInfo.Phone" />
}

接着:

var myForm = $('#myForm');
$.ajax({     
    url: myForm.attr('action'),
    type: myForm.attr('method'),
    data: myForm.serialize(),
    beforeSend: showLoadingGraphic(id),
    success: onSuccessfulPost
});

现在防伪令牌和隐藏字段将正确发送到服务器。

于 2013-04-03T07:02:55.420 回答