J'essaie de créer une page d'erreur HTTP 404 personnalisée lorsque quelqu'un tape dans une URL qui n'appelle pas une action ou un contrôleur valide dans ASP.NET MVC, au lieu d'afficher l'erreur ASP.NET générique «Ressource introuvable».
Je ne veux pas utiliser web.config pour gérer cela.
Existe-t-il une sorte de magie de routage que je puisse faire pour attraper des URL invalides?
Mise à jour: J'ai essayé la réponse donnée, mais j'obtiens toujours le vilain message "Ressource introuvable".
Une autre mise à jour: Ok, apparemment quelque chose a changé dans RC1. J'ai même essayé de piéger spécifiquement 404 sur un HttpException
et cela me donne toujours la page "Ressource introuvable".
J'ai même utilisé la fonctionnalité de ressource de MvcContrib et rien - même problème. Des idées?
Réponses:
Ajoutez simplement la route catch all à la fin de la table des routes et affichez la page de votre choix.
Voir: Comment puis-je créer un itinéraire catch all pour gérer les requêtes «page 404 non trouvée» pour ASP.NET MVC?
la source
J'ai essayé d'activer les erreurs personnalisées sur le serveur de production pendant 3 heures, il semble que j'ai trouvé la solution finale pour le faire dans ASP.NET MVC sans aucune route.
Pour activer les erreurs personnalisées dans l'application ASP.NET MVC dont nous avons besoin (IIS 7+):
Configurez les pages personnalisées dans la configuration Web sous la
system.web
section:RemoteOnly
signifie que sur le réseau local, vous verrez de vraies erreurs (très utiles lors du développement). Nous pouvons également réécrire la page d'erreur pour tout code d'erreur.Définir le paramètre Magic Response et le code d'état de la réponse (dans le module de gestion des erreurs ou dans l'attribut de gestion des erreurs)
Définissez un autre paramètre magique dans la configuration Web sous la
system.webServer
section:C'était la dernière chose que j'ai trouvée et après cela, je peux voir des erreurs personnalisées sur le serveur de production.
la source
customErrors
résultats dans une redirection 302 juste pour charger votre page d'erreur.J'ai fait fonctionner ma gestion des erreurs en créant un ErrorController qui renvoie les vues de cet article. J'ai également dû ajouter le "Catch All" à l'itinéraire dans global.asax.
Je ne vois pas comment il arrivera à l'une de ces pages d'erreur s'il n'est pas dans le Web.config ..? Mon Web.config devait spécifier:
et puis j'ai aussi ajouté:
la source
La source
NotFoundMVC - Fournit une page 404 conviviale chaque fois qu'un contrôleur, une action ou une route n'est pas trouvé dans votre application ASP.NET MVC3. Une vue appelée NotFound est rendue à la place de la page d'erreur ASP.NET par défaut.
Vous pouvez ajouter ce plugin via nuget en utilisant: Install-Package NotFoundMvc
NotFoundMvc s'installe automatiquement lors du démarrage de l'application Web. Il gère toutes les différentes manières dont une HttpException 404 est généralement levée par ASP.NET MVC. Cela inclut un contrôleur, une action et une route manquants.
Guide d'installation étape par étape:
1 - Faites un clic droit sur votre projet et sélectionnez Gérer les packages Nuget ...
2 - Recherchez
NotFoundMvc
et installez-le.3 - Une fois l'installation terminée, deux fichiers seront ajoutés à votre projet. Comme le montrent les captures d'écran ci-dessous.
4 - Ouvrez le nouveau NotFound.cshtml présent dans Views / Shared et modifiez-le à votre guise. Maintenant, exécutez l'application et tapez une URL incorrecte, et vous serez accueilli avec une page 404 conviviale.
Pas plus, les utilisateurs recevront un message d'erreur comme
Server Error in '/' Application. The resource cannot be found.
J'espère que cela t'aides :)
PS: Félicitations à Andrew Davey pour avoir créé un plugin aussi génial.
la source
Essayez ceci dans web.config pour remplacer les pages d'erreur IIS. C'est la meilleure solution que je suppose, et elle envoie également le code d'état correct.
Plus d'informations sur Tipila - Utiliser des pages d'erreur personnalisées ASP.NET MVC
la source
Cette solution n'a pas besoin de modifications de fichier web.config ou de routes fourre-tout.
Tout d'abord, créez un contrôleur comme celui-ci;
Créez ensuite la vue sous "Vues / Erreur / Index.cshtml" comme;
Ajoutez ensuite ce qui suit dans le fichier Global asax comme ci-dessous:
Si vous obtenez toujours la page d'erreur IIS personnalisée après cette opération, assurez-vous que les sections suivantes sont commentées (ou vides) dans le fichier de configuration Web:
la source
Response.End();
à la fin de votre gestionnaire Application_Error. Sans cela, seule la première occurrence d'une erreur est déclenchée pour une session donnée, ce qui est un problème lorsque vous avez, par exemple, une journalisation des erreurs personnalisée dans le gestionnaire Application_Error.Si vous travaillez dans MVC 4, vous pouvez regarder cette solution, cela a fonctionné pour moi.
Ajoutez la méthode Application_Error suivante à my
Global.asax
:Le contrôleur lui-même est vraiment simple:
Vérifiez le code source complet de Mvc4CustomErrorPage sur GitHub .
la source
J'ai eu le même problème, la chose que vous devez faire est qu'au lieu d'ajouter l'attribut customErrors dans le fichier web.config de votre dossier Views, vous devez l'ajouter dans le fichier web.config dans le dossier racine de vos projets
la source
Voici la vraie réponse qui permet de personnaliser entièrement la page d'erreur en un seul endroit. Pas besoin de modifier web.config ou de créer un code séparé.
Fonctionne également dans MVC 5.
Ajoutez ce code au contrôleur:
Basé sur http://www.eidias.com/blog/2014/7/2/mvc-custom-error-pages
la source
Je vais parler de quelques cas spécifiques,
si vous utilisez la méthode PageNotFound dans HomeController comme ci-dessous
cela ne fonctionnerait pas. Mais vous devez effacer les balises Route comme ci-dessous,
Et si vous le changez en tant que méthode Name dans web.config, cela fonctionne. Cependant, n'oubliez pas de faire du code comme ci-dessous dans web.config
la source