Какие методы доступны для остановки нескольких обратных передач формы в ASP.NET MVC?

Передайте экземпляр ParallelOptions с ParallelOptions.MaxDegreeOfParallelism, установленным от 4 до Parallel.ForEach.

Тем не менее, это может не иметь смысла на других машинах, которые могут иметь больше или меньше ядер, чем вы. В общем, вы должны позволить структуре определять степень параллелизма.

20
задан WooWaaBob 20 May 2009 в 16:29
поделиться

5 ответов

Часто люди упускают из виду самый обычный способ справиться с этим, который заключается в использовании одноразовых ключей .

Вы можете использовать PRG , как упоминали другие но недостатком PRG является то, что он не решает проблему двойного щелчка, он требует дополнительной поездки на сервер для перенаправления, а поскольку последний шаг - это запрос GET, у вас нет прямого доступа к данным, которые был только что опубликован (хотя его можно было передать как параметр запроса или поддержать на стороне сервера).

Мне нравится решение Javascript, потому что оно работает в большинстве случаев.

Одноразовые ключи ] однако работать все время. Ключ nonce - это случайный уникальный идентификатор GUID, сгенерированный сервером (также сохраненный в базе данных) и встроенный в форму. Когда пользователь отправляет форму POST, также отправляется одноразовый ключ. Как только на сервер поступает запрос POST, сервер проверяет, существует ли ключ nonce в его базе данных. Если это так, сервер удаляет ключ из базы данных и обрабатывает форму. Следовательно, если пользователь выполняет POST дважды, второй POST не будет обработан, потому что одноразовый ключ был удален после обработки первого POST.

Одноразовый ключ имеет дополнительное преимущество в том, что он обеспечивает дополнительную безопасность, предотвращая атак повторного воспроизведения. (человек посередине обнюхивает ваш HTTP-запрос и затем воспроизводит его на сервере, который рассматривает его как законный).

16
ответ дан 30 November 2019 в 00:59
поделиться

Возможно, вам стоит взглянуть на шаблон Post-Redirect-Get (PRG):

2
ответ дан 30 November 2019 в 00:59
поделиться

Вы всегда должны возвращать перенаправление в качестве ответа HTTP на POST. Это предотвратит повторное выполнение POST, когда пользователь перемещается вперед и назад с помощью кнопок Вперед / Назад в браузере.

Если вы беспокоитесь о том, что пользователи дважды щелкают ваши кнопки отправки, просто попросите небольшой скрипт отключить их немедленно отправить.

5
ответ дан 30 November 2019 в 00:59
поделиться

На самом деле это не относится к MVC, но на наших веб-страницах мы следуем схеме, согласно которой действия выполняются с помощью вызовов AJAX, а не полностраничных POST. Таким образом, переход по URL-адресу никогда не выполняет никаких действий, а просто отображает форму. Вызов AJAX не будет в истории

1
ответ дан 30 November 2019 в 00:59
поделиться

Наряду с отключением кнопок, вы можете добавить прозрачный div по всей веб-странице, чтобы при нажатии ничего не происходило. Мы делаем это на моей работе и добавляем небольшой дружелюбный ярлык с надписью «Запрос на обработку».

0
ответ дан 30 November 2019 в 00:59
поделиться
Другие вопросы по тегам:

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