Je veux empêcher les utilisateurs de soumettre des formulaires plusieurs fois dans .NET MVC. J'ai essayé plusieurs méthodes en utilisant Javascript, mais j'ai eu des difficultés à le faire fonctionner dans tous les navigateurs. Alors, comment puis-je empêcher cela dans mon contrôleur ? Existe-t-il un moyen de détecter les soumissions multiples ?
Réponses
Trop de publicités?Ne réinventez pas la roue :)
Utilisez le Poster/Rediriger/Retrouver modèle de conception.
Vous trouverez ici un question et une réponse donnant quelques suggestions sur la façon de l'implémenter dans ASP.NET MVC.
Pour ce faire, vous pouvez créer une sorte de drapeau d'entrée statique spécifique à l'utilisateur ou à la manière dont vous souhaitez protéger la ressource. J'utilise un ConcurrentDictionary pour suivre les entrées. La clé est essentiellement le nom de la ressource que je protège combiné à l'ID de l'utilisateur. L'astuce consiste à trouver comment bloquer la requête lorsque vous savez qu'elle est en cours de traitement.
public async Task<ActionResult> SlowAction()
{
if(!CanEnterResource(nameof(SlowAction)) return new HttpStatusCodeResult(204);
try
{
// Do slow process
return new SlowProcessActionResult();
}
finally
{
ExitedResource(nameof(SlowAction));
}
}
Le renvoi d'un 204 est une réponse à la demande de double-clic qui ne fera rien du côté du navigateur. Lorsque le processus lent est terminé, le navigateur reçoit la réponse correcte à la demande initiale et agit en conséquence.
- Réponses précédentes
- Plus de réponses
0 votes
Duplicata possible de Dépannage des problèmes de jeton anti-falsification
0 votes
La plupart des réponses ci-dessous concernent l'utilisation de l'identifiant de formulaire. Voir ceci pour définir l'identifiant du formulaire : stackoverflow.com/q/2854616/3885927