2016-11-04 6 views
0

Я пытаюсь передать токен AntiForgery в заголовок запроса Ajax. Мой код JavaScript выглядит следующим образом:MVC-контроллер, похоже, проверяет неправильный токен AntiForgery

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() 

Проблема заключается в том, что в моей общей папке Views, у меня есть частичный вид входа в систему с формой, как это:

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

Поэтому, когда я вызываю свой метод контроллера, используя вышеприведенный код Ajax, я получаю ошибку сервера. Мой запрос выполняется, если я удаляю токен AntiForgery из моей учетной записи LogOff (значения токена различаются для каждой формы). Как я могу разрешить это, не удаляя токен входа в систему?

Вот мой контроллер:

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

Вот что я в основном шел по: How to make ajax request with anti-forgery token in mvc

ответ

0

Я решил эту проблему. Перед моим вызовом ajax я сериализовал всю свою форму. Я изменил:

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

к этому:

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

И теперь я нахожусь в бизнесе.

Смежные вопросы