Общей проблемой в Интернете является то, что пользователь нажимает кнопку отправки формы несколько раз, поэтому сервер обрабатывает форму более одного раза. Это также может произойти, когда пользователь нажимает кнопку «Назад», отправив форму, и поэтому она снова обрабатывается.Какие методы доступны для остановки нескольких обратных передач формы в ASP.NET MVC?
Каков наилучший способ остановить это из ASP.NET MVC?
Возможности, как я вижу его являются:
- Отключить кнопку после того, как представить - это получает вокруг нескольких щелчков мыши, но не навигации
- Есть принимающее действие перенаправления немедленно - браузеры, кажется, оставить эти переадресовывает из истории
- Место уникальный маркер на сессии и на форме - если они совпадают обрабатывать форму - если не очистить форму для свежего представить
Есть ли еще?
Существуют ли какие-либо конкретные реализации любого из них?
Я вижу, что третий вариант реализуется как ActionFilter с расширением HtmlHelper аналогичным образом с анти-подделкой.
С нетерпением ожидаем услышать от вас MVC'ers.
Интересная идея, я бы добавил, что вы должны поместить последовательность в транзакцию: 1) проверить nonce 2) процесс 3) удалить nonce. Если вы не делаете этого атомарно, у вас есть условие гонки, когда сообщение может обрабатываться многократно, особенно. если обработка занимает некоторое время, чтобы закончить (и пользователь нетерпелив). Одна вещь, о которой я до сих пор не совсем понимаю, если POST обнаруживает дублирующее представление, что должно быть возвращено пользователю? Страница, показывающая, что сообщение выполняется? – DSO
Сначала я удалю ключ nonce, а затем сделаю обработку, чтобы все было просто. Как обращаться с обманом - это дизайнерское решение и зависит от вас. Однако описательный ответ на то, что только что произошло, поможет пользователю оценить ваше веб-приложение еще больше. – aleemb
Вы видели реализацию ключей nonce в ASP.NET MVC, используя ActionFilters, возможно? Я могу представить, что это сделает реализацию очень простой и многоразовой. Он также может использовать БД или просто переменную сеанса. – WooWaaBob