Ich versuche, eine benutzerdefinierte HTTP 404-Fehlerseite zu erstellen, wenn jemand eine URL eingibt, die keine gültige Aktion oder keinen gültigen Controller in ASP.NET MVC aufruft, anstatt den generischen ASP.NET-Fehler "Ressource nicht gefunden" anzuzeigen.
Ich möchte die web.config nicht verwenden, um damit umzugehen.
Gibt es irgendeine Art von Routing-Magie, mit der ich ungültige URLs abfangen kann?
Update: Ich habe die Antwort ausprobiert, erhalte jedoch immer noch die hässliche Meldung "Ressource nicht gefunden".
Noch ein Update: Ok, anscheinend hat sich in RC1 etwas geändert. Ich habe sogar versucht, 404 speziell auf einer zu fangen, HttpException
und es gibt mir immer noch nur die Seite "Ressource nicht gefunden".
Ich habe sogar die Ressourcenfunktion von MvcContrib verwendet und nichts - das gleiche Problem. Irgendwelche Ideen?
Antworten:
Fügen Sie am Ende der Routentabelle einfach catch all route hinzu und zeigen Sie die gewünschte Seite an.
Siehe: Wie kann ich eine Route abfangen, um alle Abfragen für ASP.NET MVC zu verarbeiten?
quelle
Ich habe 3 Stunden lang versucht, benutzerdefinierte Fehler auf dem Produktionsserver zu aktivieren. Anscheinend habe ich eine endgültige Lösung gefunden, wie dies in ASP.NET MVC ohne Routen durchgeführt werden kann.
Um benutzerdefinierte Fehler in der ASP.NET MVC-Anwendung zu aktivieren, benötigen wir (IIS 7+):
Konfigurieren Sie benutzerdefinierte Seiten in der Webkonfiguration unter
system.web
Abschnitt:RemoteOnly
bedeutet, dass im lokalen Netzwerk echte Fehler auftreten (sehr nützlich während der Entwicklung). Wir können die Fehlerseite auch für jeden Fehlercode neu schreiben.Stellen Sie den magischen Antwortparameter und den Antwortstatuscode ein (im Fehlerbehandlungsmodul oder im Fehlerbehandlungsattribut).
Stellen Sie eine andere magische Einstellung in der Webkonfiguration unter
system.webServer
Abschnitt ein:Dies war die letzte Sache, die ich gefunden habe, und danach kann ich benutzerdefinierte Fehler auf dem Produktionsserver sehen.
quelle
customErrors
Ergebnissen in einer 302-Umleitung, nur um Ihre Fehlerseite zu laden.Ich habe meine Fehlerbehandlung zum Laufen gebracht, indem ich einen ErrorController erstellt habe, der die Ansichten in diesem Artikel zurückgibt. Ich musste auch die "Catch All" zur Route in global.asax hinzufügen.
Ich kann nicht sehen, wie es zu einer dieser Fehlerseiten kommt, wenn es nicht in der Web.config ist ..? Meine Web.config musste angeben:
und dann habe ich noch hinzugefügt:
quelle
Quelle
NotFoundMVC - Bietet eine benutzerfreundliche 404-Seite, wenn in Ihrer ASP.NET MVC3-Anwendung kein Controller, keine Aktion oder Route gefunden wird. Anstelle der Standard-ASP.NET-Fehlerseite wird eine Ansicht mit dem Namen NotFound gerendert.
Sie können dieses Plugin über Nuget hinzufügen, indem Sie Folgendes installieren: Install-Package NotFoundMvc
NotFoundMvc installiert sich automatisch beim Start der Webanwendung. Es behandelt die verschiedenen Arten, wie eine 404 HttpException normalerweise von ASP.NET MVC ausgelöst wird. Dies beinhaltet einen fehlenden Controller, eine fehlende Aktion und eine fehlende Route.
Schritt für Schritt Installationsanleitung:
1 - Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Nuget-Pakete verwalten ...
2 - Suchen nach
NotFoundMvc
und installieren Sie es.3 - Nach Abschluss der Installation werden Ihrem Projekt zwei Dateien hinzugefügt. Wie in den folgenden Screenshots gezeigt.
4 - Öffnen Sie die neu hinzugefügte NotFound.cshtml unter Ansichten / Freigegeben und ändern Sie sie nach Belieben. Führen Sie nun die Anwendung aus und geben Sie eine falsche URL ein. Sie werden dann mit einer benutzerfreundlichen 404-Seite begrüßt.
Nicht mehr, werden Benutzer Fehlermeldungen wie erhalten
Server Error in '/' Application. The resource cannot be found.
Hoffe das hilft :)
PS: Ein großes Lob an Andrew Davey für das tolle Plugin.
quelle
Versuchen Sie dies in web.config, um IIS-Fehlerseiten zu ersetzen. Dies ist die beste Lösung, die ich denke, und sie sendet auch den richtigen Statuscode aus.
Weitere Informationen von Tipila - Benutzerdefinierte Fehlerseiten verwenden ASP.NET MVC
quelle
Diese Lösung benötigt keine Änderungen an der Datei web.config oder Catch-All-Routen.
Erstellen Sie zunächst einen Controller wie diesen.
Erstellen Sie dann die Ansicht unter "Ansichten / Fehler / Index.cshtml" als;
Fügen Sie dann wie folgt Folgendes in die globale Asax-Datei ein:
Wenn Sie danach immer noch die benutzerdefinierte IIS-Fehlerseite erhalten, stellen Sie sicher, dass die folgenden Abschnitte in der Webkonfigurationsdatei auskommentiert (oder leer) sind:
quelle
Response.End();
, am Ende Ihres Application_Error-Handlers ein a hinzuzufügen . Ohne dies wird nur das erste Auftreten eines Fehlers für eine bestimmte Sitzung ausgelöst. Dies ist ein Problem, wenn Sie beispielsweise eine benutzerdefinierte Fehlerprotokollierung im Application_Error-Handler haben.Wenn Sie in MVC 4 arbeiten, können Sie sich diese Lösung ansehen , sie hat bei mir funktioniert.
Fügen Sie die folgende Application_Error-Methode zu my hinzu
Global.asax
:Der Controller selbst ist wirklich einfach:
Überprüfen Sie den vollständigen Quellcode von Mvc4CustomErrorPage bei GitHub .
quelle
Ich hatte das gleiche Problem. Sie müssen lediglich das Attribut customErrors in der Datei web.config in Ihrem Ordner Views hinzufügen, sondern es in der Datei web.config in Ihrem Projektstammordner hinzufügen
quelle
Hier ist eine echte Antwort, die es ermöglicht, die Fehlerseite an einem Ort vollständig anzupassen. Sie müssen web.config nicht ändern oder separaten Code erstellen.
Funktioniert auch in MVC 5.
Fügen Sie diesen Code zur Steuerung hinzu:
Basierend auf http://www.eidias.com/blog/2014/7/2/mvc-custom-error-pages
quelle
Ich werde über einige spezielle Fälle sprechen,
Wenn Sie die 'PageNotFound-Methode' in HomeController wie unten verwenden
das würde nicht funktionieren. Sie müssen jedoch die Routentags wie unten löschen.
Und wenn Sie es als Methodenname in web.config ändern , funktioniert es. Vergessen Sie jedoch nicht, Code wie unten in web.config auszuführen
quelle