Ein häufiges Webproblem ist, dass ein Benutzer mehrfach auf die Schaltfläche Senden eines Formulars klickt, sodass der Server das Formular mehr als einmal verarbeitet. Dies kann auch passieren, wenn ein Benutzer die Zurück-Taste drückt, nachdem er ein Formular gesendet hat, und so wird es erneut verarbeitet.Welche Methoden stehen zur Verfügung, um mehrere Postbacks eines Formulars in ASP.NET MVC zu stoppen?
Was ist der beste Weg, dies in ASP.NET MVC zu verhindern?
Möglichkeiten wie ich es sehe, sind:
- die Taste deaktivieren nach einreichen - in dieser Runde die mehrere Klicks bekommt aber nicht die Navigation
- Haben Sie die Aktion Empfangs umleiten sofort - Browser Sie sich diese Umleitungen zu verlassen scheinen der Geschichte
- Platz ein einzigartiges Token in der Sitzung und auf dem Formular - wenn sie das Formular verarbeiten übereinstimmen - wenn nicht die Form für einen frischen klar einreichen
Gibt es mehr?
Gibt es einige spezifische Implementierungen von diesen?
Ich kann die dritte Option als ActionFilter mit einer HtmlHelper-Erweiterung in ähnlicher Weise wie die Anti-Fälschung Zeug implementiert werden.
Ich freue mich von Ihnen zu hören MVC'ers da draußen.
Interessante Idee, eine Sache, die ich hinzufügen würde, ist, dass Sie die Sequenz in eine Transaktion setzen sollten: 1) überprüfen Sie nonce 2) Prozess 3) lösche nonce. Wenn du das nicht atomar machst, hast du eine Race Condition, in der der Post mehrere Male verarbeitet werden kann. wenn die Verarbeitung etwas dauert (und der Benutzer ungeduldig ist). Eine Sache, die mir immer noch nicht klar ist, ist, wenn der POST eine doppelte Einreichung erkennt, was sollte dem Benutzer zurückgegeben werden? Eine Seite, die anzeigt, dass der Post in Bearbeitung ist? – DSO
Ich würde zuerst den Nonce-Schlüssel löschen und dann die Verarbeitung durchführen, um die Dinge einfach zu halten. Wie man mit einem Betrogenen umgeht, ist eine Designentscheidung und liegt bei Ihnen. Eine beschreibende Antwort auf das, was gerade passiert ist, würde dem Benutzer jedoch helfen, Ihre Web-App noch mehr zu schätzen. – aleemb
Haben Sie eine Implementierung von Nonce-Schlüsseln in ASP.NET MVC mit ActionFilters vielleicht gesehen? Ich kann mir vorstellen, dass dies die Implementierung sehr einfach und wiederverwendbar machen würde. Es könnte auch eine DB oder einfach eine Sitzungsvariable verwenden. – WooWaaBob