Передача AntiForgeryToken с помощью AJAX

#javascript #jquery #asp.net #ajax #asp.net-mvc

#javascript #jquery #asp.net #ajax #asp.net-mvc

Вопрос:

Я создаю диалоговое окно для редактирования, и мне нужно передать AntiForgeryToken с ним. Но я пробовал несколько раз и все равно не могу его передать.

 $("#EditSave").click(function(e) {
    e.preventDefault();                           
    $.ajax({
        url: 'PIS/Edit',
            type: "POST",
            dataType: 'json',
            data: $('form').serialize(),                  
            success: function (data) {
                if (data.Save) {
                    dialog.dialog('close');
                    var notification = {
                        type: "success",
                        title: "Successfully",
                        message: "save ",
                        icon: 'glyphicon glyphicon-ok-sign'
                    };
                    showNotification(notification);
                    updatePartial();
                }
                if (data.AlreadyExist) {
                    var notification = {
                        type: "danger",
                        title: "Warning!",
                        message: "Already Exist",
                        icon: 'glyphicon glyphicon-exclamation-sign'
                    };
                    showNotification(notification);
                }
                if (data.Back) {
                    var notification = {
                        type: "danger",
                        title: "Warning!",
                        message: "Information was not successfully saved. Please check required fields.",
                        icon: 'glyphicon glyphicon-exclamation-sign'
                    };
                    showNotification(notification);
                }
                else {
                    debugger
                    dialog.dialog('close');
                }

            },
            error: function (xhr, status, error) {
                alert(xhr.responseText);
            }
    })
    return false;
})
  

Это действие моего контроллера, и мне нужно передать токен в моем представлении, чтобы можно было предотвратить сквозные сценарии, потому что это вид редактирования в виде диалогового окна.

  public async Task<PartialViewResult> Edit(string id)
    {         
        return PartialView();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<JsonResult>Edit(PISEditViewModel viewModel)
    { 
        return Json(new {Back = true });
    }
  

Это сообщение об ошибке, которое я получил при передаче $(‘form’).serialize()

Не удалось расшифровать токен защиты от подделки. Если это приложение размещено на веб-ферме или кластере, убедитесь, что на всех компьютерах установлена одна и та же версия ASP.NET Веб-страниц и что конфигурация <machineKey> определяет явные ключи шифрования и проверки. Автогенерация не может использоваться в кластере.

Комментарии:

1. Не могли бы вы отформатировать свой фрагмент кода, а также включить метод представления (разметки) и действия? Не могли бы вы также указать, какую ошибку вы получаете / откуда вы знаете, что она не работает?

2. $('form').serialize(); будет включать токен (при условии, что вы правильно отобразили его внутри формы

3. Когда я передаю $(‘form’).serialize(); я получаю сообщение об ошибке «Не удалось расшифровать Antiforgerytoken»

4. Добавьте полную информацию о сообщении об ошибке в свой вопрос (не комментарии)

5. Я думаю, что на вашей странице _RequestVerificationToken используется дважды, проверьте это.