MVC控制器似乎正在验证错误的AntiForgery令牌

时间:2016-11-04 22:39:01

标签: javascript jquery ajax asp.net-mvc

我正在尝试在Ajax请求的标头中传递AntiForgery令牌。我的JavaScript代码如下所示:

var tokenadr = $('form[action="/ServiceRequests/CreateRequest"] input[name="__RequestVerificationToken"]').val();
var token = tokenadr;
var headers = {};
var headersadr = {};
headers['__RequestVerificationToken'] = token;
headersadr['__RequestVerificationToken'] = tokenadr;
$.ajax({
    type: 'POST',
    dataType: 'json',
    headers: headersadr,
    cache: false,
    url: "/ServiceRequests/CreateRequest",
    processData: false,
    contentType: false,
    data: formdata,
    success: function (response, textStatus, jqXHR) {
        window.location = "/ServiceRequests/Details/" + response.id;
    },

    error: function (jqXHR, textStatus, errorThrown) {
        alert('Error - ' + errorThrown);
    },

})`

我的表单如下:

@using (Html.BeginForm("CreateRequest", "ServiceRequests", null, FormMethod.Post, new { enctype = "multipart/form-data", id = "requestForm" })) 
   {
   @Html.AntiForgeryToken()

问题是在我的共享视图文件夹中,我有一个部分登录视图,其形式如下:

using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()

因此,当我使用上面的Ajax代码调用我的控制器方法时,我收到服务器错误。如果我从我的帐户LogOff表单中删除AntiForgery令牌,我的请求就会通过(每个表单的令牌值都不同)。如何在不删除帐户注销令牌的情况下解决此问题?

这是我的控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateRequest()
{

以下是我主要经历的内容:How to make ajax request with anti-forgery token in mvc

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。在我的ajax调用之前,我正在序列化我的整个表单。我改变了:

var other_data = $('form').serializeArray();

对此:

var other_data = $('#requestForm').serializeArray();

现在我在做生意。