Je suis en train de faire un custom HTTP 404 page d'erreur lorsque quelqu'un tape dans l'URL
qui n'invoquent pas d'une action valide ou le contrôleur dans ASP.NET MVC.
Au lieu de l'affichage de la Ressource générique Pas Trouvé ASP.NET erreur...
Je ne veux pas utiliser le web config pour gérer cela.
Est ce qu'il y a de routage de la magie que je peux faire pour attraper l'Url non valide?
Mise à jour: j'ai essayé la réponse donnée... cependant j'ai toujours l'laid ressource pas trouvé de message.
Une autre mise à jour OK. Apparemment, quelque chose a changé dans RC1.. j'ai même essayé spécifiquement piégeage 404 sur un HttpException et toujours il me donne juste la ressource ne trouve pas la page.
Je l'ai même utilisé mvcContrib ressources de la fonctionnalité et de rien. Même problème... des idées? S'il vous plaît avant d'aller me écrous...
Personnalisé ASP.NET MVC Page d'Erreur 404
- Demandé le 16 de Février, 2009
- Quand la question a-t-elle été
- 55707 affichage
- Nombre de visites la question a
- 5 Réponses
- Nombre de réponses aux questions
- Ouvert
- Situation réelle de la question
Réponses
Trop de publicités?J'ai essayé d'activer les messages d'erreurs sur le serveur de production pour 3 heures, semble j'ai trouvé la solution finale la façon de faire dans ASP.NET MVC sans routes.
Pour activer les messages d'erreurs dans ASP.NET application MVC, nous avons besoin (IIS 7+):
Configurer la personnalisation des pages web de configuration sous
system.web
section:<customErrors mode="RemoteOnly" defaultRedirect="~/error"> <error statusCode="404" redirect="~/error/Error404" /> <error statusCode="500" redirect="~/error" /> </customErrors>
RemoteOnly
signifie que sur le réseau local vous permettra de voir les erreurs réelles (très utile lors du développement). On peut aussi réécrire page d'erreur pour chaque code d'erreur.Jeu de magie paramètre de Réponse et le code d'état de réponse (dans la gestion d'erreur de module ou d'une erreur de la poignée de l'attribut)
HttpContext.Current.Response.StatusCode = 500; HttpContext.Current.Response.TrySkipIisCustomErrors = true;
Définir une autre magie paramètre de configuration web de vertu
system.webServer
section:<httpErrors errorMode="Detailed" />
C'était la dernière chose que j'ai trouvé et après cela, je peux voir les messages d'erreur personnalisés sur le serveur de production.
J'ai obtenu mon erreur de manipulation d'un travail par la création d'un ErrorController qui renvoie les points de vue dans cet article. J'ai également ajouté le "Catch All" de l'itinéraire global.asax.
Je ne vois pas comment il va arriver à l'une de ces pages d'erreur si elle n'est pas dans le Web.config..? Mon Web.config a dû préciser:
customErrors mode="On" defaultRedirect="~/Error/Unknown"
et puis, j'ai aussi ajouté:
error statusCode="404" redirect="~/Error/NotFound"
Espérons que cette aide.
Source
NotFoundMVC - Fournit une interface conviviale page 404 à chaque fois qu'un contrôleur, de l'action ou de l'itinéraire n'est pas trouvé dans votre ASP.NET MVC3 application.
Une vue appelée NotFound est rendu au lieu de la valeur par défaut ASP.NET page d'erreur.
Vous pouvez ajouter ce plugin via nuget à l'aide de:
Install-Package NotFoundMvc
NotFoundMvc s'installe automatiquement lors de l'application web start-up. Il gère toutes les différentes façons dont un 404 HttpException est généralement jeté par ASP.NET MVC. Cela comprend un manque de contrôleur, de l'action et de la route.
L'étape par Étape Guide d'Installation :
1 - clic Droit sur votre Projet et Sélectionnez Gérer les Packages Nuget...
2 - Recherche d' NotFoundMvc
et l'installer.
3 - une Fois l'installation est terminée, deux fichiers seront ajoutés à votre projet. Comme indiqué dans la capture d'écran ci-dessous.
4 - Ouvrir le nouvellement ajouté NotFound.cshtml présents à Vue, Partagé, et de le modifier à votre gré. Maintenant, exécutez l'application et tapez une url incorrecte, et vous serez accueillis avec une interface Utilisateur conviviale pour la page d'erreur 404.
Pas plus, les utilisateurs reçoivent des messages d'erreur comme Server Error in '/' Application. The resource cannot be found.
Espérons que cela aide :)
P. S : Bravo à Andrew Davey pour faire un tel plugin génial.
essayez ceci dans le web.config pour remplacer IIS pages d'erreur. C'est la meilleure solution je crois, et il envoie le code d'état correct aussi.
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="404" path="Error404.html" responseMode="File" />
<error statusCode="500" path="Error.html" responseMode="File" />
</httpErrors>
Plus d'infos ici
Cette solution n'a pas besoin de web.fichier de configuration des modifications ou catch-toutes les routes.
Tout d'abord, créez un contrôleur comme ceci;
public class ErrorController : Controller
{
public ActionResult Index()
{
ViewBag.Title = "Regular Error";
return View();
}
public ActionResult NotFound404()
{
ViewBag.Title = "Error 404 - File not Found";
return View("Index");
}
}
Puis créer le point de vue sous "Vues/Erreur/Index.cshtml" comme;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<p>We're sorry, page you're looking for is, sadly, not here.</p>
Ensuite, ajoutez la ligne suivante dans le Global asax fichier comme ci-dessous:
protected void Application_Error(object sender, EventArgs e)
{
// Do whatever you want to do with the error
//Show the custom error page...
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
if ((Context.Server.GetLastError() is HttpException) && ((Context.Server.GetLastError() as HttpException).GetHttpCode() != 404))
{
routeData.Values["action"] = "Index";
}
else
{
// Handle 404 error and response code
Response.StatusCode = 404;
routeData.Values["action"] = "NotFound404";
}
Response.TrySkipIisCustomErrors = true; // If you are using IIS7, have this line
IController errorsController = new ErrorController();
HttpContextWrapper wrapper = new HttpContextWrapper(Context);
var rc = new System.Web.Routing.RequestContext(wrapper, routeData);
errorsController.Execute(rc);
}
Si vous obtenez toujours la coutume IIS page d'erreur après avoir fait cela, assurez-vous que les articles suivants sont en commentaire(ou vide) dans le fichier de configuration web:
<system.web>
<customErrors mode="Off" />
</system.web>
<system.webServer>
<httpErrors>
</httpErrors>
</system.webServer>
Questions connexes
- Comment utiliser java.net.URLConnection pour gérer les requêtes HTTP et d’incendie ?
- jQuery renvoyant "analyseur syntaxique" pour la requête ajax
- "Impossible de charger le type [Namespace].Mondial" me causer du chagrin
- Quel est le meilleur algorithme pour un substituée Système.Objet.GetHashCode?
- Entity Framework vs LINQ to SQL
- Création d’un tableau d’octets dans un flux
- Alternatives Open Source au réflecteur?
- Debug/Release différence
- À quoi bon la technologie podcasts sont là-bas?
- Centrer une div à l’aide de balisage 3 Bootstrap ou CSS
- Installer le Service Windows créé dans Visual Studio
Questions en vedette
- Erreur de démarrage du serveur jboss
- À l'aide des Expressions Régulières pour Extraire une Valeur en Java
- Sont là de bonnes raisons de ne pas utiliser un ORM?
- L'exécution d'un cron toutes les 30 secondes
- Comment puis-je supprimer tous les fichiers/dossiers non versionnés/ignoré dans ma copie de travail ?
- Quand quelqu'un écrit un nouveau langage de programmation, qu'est-ce qu'il écrit IN?