J'ai une grille qui fournit des liens permettant aux utilisateurs de télécharger des fichiers. Les fichiers sont stockés en dehors de l'application, les références de chemin sont lues dans la base de données et un gestionnaire HTTP (* .ashx) est utilisé pour servir chaque fichier demandé. Il est cependant possible qu'une entrée de base de données pointe vers un fichier inexistant. J'attrape le FileNotFoundException
, mais je ne sais pas quelle serait la meilleure méthode pour informer l'utilisateur du fichier manquant (afin qu'il puisse contacter le support).Meilleure façon de gérer un 404 dans un gestionnaire HTTP de téléchargement de fichier?
La première idée est de définir un code 404 standard sur la réponse, et c'est ce que je fais maintenant. Un moyen plus pratique serait d'afficher une notification (jQuery) sur un fichier manquant, mais le téléchargement du fichier n'est pas fait en AJAX, donc cela impliquerait un processus en deux étapes - un gestionnaire onclick côté client appelle un service web méthode pour vérifier si le fichier existe, sinon, j'annule le clic (return false) et affiche un message amical à l'utilisateur. Si le fichier existe cependant, je procède à l'exécution normale. Mais cela ajoute encore un autre appel de serveur.
Avez-vous fait face à un problème similaire? Comment l'avez-vous résolu? Quelques clarifications - l'application est construite en ASP.NET 2.0 et utilise jQuery pour appeler les méthodes de service Web.
Mais je ne peux pas faire la différence entre une situation de fichier manquante et celle d'une page entière manquante. Je pourrais fournir une explication plus élaborée sur la page 404, comme "si vous essayiez de télécharger un fichier de support de contact, si vous essayiez d'accéder à une page, il ne peut pas être trouvé", etc ..) –
Bien vous pourriez mettre en œuvre dans votre gestionnaire HTTP pour rediriger vers un fichier non trouvé 404 page spécifique, sinon retourner un «normal» 404? – RuudKok
Doh! Bien sûr, la redirection fonctionne! Je comptais sur le cadre pour rediriger vers la page 404 en passant un code d'état, au lieu de faire un simple Response.Redirect(). Tellement évident ... Merci! –