Необходимый файл анти-подделки «__RequestVerificationToken» не работает с использованием ajax [duplicate]

resize() не только выделяет память, но также создает столько раз, сколько желаемый размер , который вы передаете в resize() в качестве аргумента. Но reserve() выделяет только память, а не создает экземпляры. То есть

std::vector v1;
v1.resize(1000); //allocation + instance creation
cout <<(v1.size() == 1000)<< endl;   //prints 1
cout <<(v1.capacity()==1000)<< endl; //prints 1

std::vector v2;
v2.reserve(1000); //only allocation
cout <<(v2.size() == 1000)<< endl;   //prints 0
cout <<(v2.capacity()==1000)<< endl; //prints 1

Выход ( онлайн-демонстрация ):

1
1
0
1

Таким образом, resize() может быть нежелательным, если вы не хотите объекты, созданные по умолчанию. Это тоже будет медленным. Кроме того, если вы push_back() добавили к нему новые элементы, size() вектора еще больше увеличит , выделив новую память (что также означает перемещение существующих элементов в вновь выделенное пространство памяти). Если вы использовали reserve() в начале, чтобы обеспечить достаточную выделенную память, size() вектора будет увеличиваться, когда вы push_back() к нему, но он не будет выделять новую память еще раз, пока не закончится пространство, которое вы зарезервировали для него.

2
задан Eitan K 26 June 2015 в 12:51
поделиться

1 ответ

В коде, который вы указали, есть по крайней мере 2 проблемы.

Сначала ваш метод помечен атрибутом [ValidateAntiForgeryToken], но вы не передаете токен, поэтому метод никогда не будет запущен. Либо удалите атрибут, либо включите его (это предполагает, что ваша форма включает @Html.AntiForgeryToken())

data: { 
    __RequestVerificationToken: $('[name=__RequestVerificationToken]').val(),      
    .... // your other properties
},

Во-вторых, ваша публикация объекта javascript, поэтому вам нужно удалить опцию contentType: "application/json; charset=utf-8", (или, альтернативно, вы необходимо сгенерировать данные, используя JSON.stringify()

. Замечание: его непонятно, из какого кода вы вручную создаете объект для отправки на контроллер. Если ваши элементы формы основаны на SaveGameViewModel и правильно сгенерированный с помощью строго типизированных html-помощников, вы можете отправить его обратно с помощью

$.ajax({
    data: $('form').serialize(),
    ....
});
2
ответ дан Stephen Muecke 15 August 2018 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: