Die Frage ist: Warum funktioniert die benutzerdefinierte Fehlerbehandlung nicht für nicht vorhandene Pfade / Verzeichnisse?
Aktualisiert mit festem Code (danke an alle für Ihre Eingabe):
* Aktualisierter Code für web.config und global.asax *
%Vor% Wir haben ein Website-Setup mit benutzerdefinierter Fehlerbehandlung in web.config
und global.asax
(das Setup wird unten gezeigt). Wir sind in der Lage, alle 404er und 500er ohne Probleme zu behandeln. Die Fehler werden in Application_Error
in global.asax
abgefangen, in einem DB protokolliert und dann mit HttpContext
den Statuscode gesetzt und Server.Transfer()
verwendet, um den Benutzer auf die entsprechende Fehlerseite zu verschieben (Umleitungen verursachen einen 302 und tut weh SEO).
Das Problem ist, wenn der Benutzer in http://www.example.com/whatever
eingibt, wird in Firefox eine leere Seite angezeigt und in IE wird die IE 404-Seite angezeigt. Firebug zeigt an, dass keine Statuscodes ausgelöst werden, und wenn ich die Lösung debugge, werden keine Breakpoints, die ich gesetzt habe, in global.asax
getroffen. Die seltsame Sache ist, dass ein Benutzer http://www.example.com/whatever/hmm.aspx
eingeben kann und ein Fehler wird getroffen. Es scheint, dass es nur auf nicht existierenden Seiten und nicht auf Pfaden / Verzeichnissen arbeitet, die nicht existieren.
Unten ist mein web.config
Code für den Fehler und mein global.asax
Code für den Anwendungsfehler.
Ich habe * * hinzugefügt, um Informationen zu verbergen. Sie haben gültige .aspx
Seiten darin:
Webkonfiguration:
%Vor%Code:
%Vor%Von diesem Kommentar zu Mr. Enttäuschung:
Danke, ich verwende IIS 7 lokal und IIS 7.5 live. Lass es mich wissen, wenn du das Material findest.
Wenn Ihre Anwendung in einem Anwendungspool ausgeführt wird, der für die Ausführung im klassischen Pipeline-Modus konfiguriert ist, werden Inhalte, die nicht für ASP.NET vorgesehen sind, nicht in der ASP.NET-Laufzeit angezeigt. d. h. Ordner, die nicht existieren. Diese werden direkt von IIS behandelt.
Sie haben eine Auswahl:
Setzen Sie den Anwendungspool auf den integrierten Pipeline-Modus. Sie müssen möglicherweise auch die folgende Einstellung konfigurieren, wenn die Fehlerbehandlung von IIS Ihren ASP.NET 404- und 500-Statuscode von ASP.NET "isst":
%Vor%Wenn sich die Anwendung im Modus "Integrierte Pipeline" nicht gut verhält, Sie aber nur besorgt sind, dass eine Seite für eine 404-Antwort angezeigt wird, konfigurieren Sie Folgendes:
%Vor% Sie müssen den Statuscode 404
auf der Seite festlegen, andernfalls wird nur 200
zurückgegeben.
Wenn Sie eine statische Seite verwenden, zum Beispiel:
%Vor% Dies wird 404
zurückgeben.
Wenn sich die Anwendung im Modus "Integrierte Pipeline" nicht gut verhält UND Sie unbedingt 404-Fehler über Ihren Error-Handler übergeben müssen, müssen Sie möglicherweise den Platzhalterinhalt manuell dem ASP.NET-HttpHandler zuordnen, damit diese Anfragen ausgeführt werden Schlag die Pipeline. Dies wäre eine suboptimale Lösung.
ASP.NET wird niemals von IIS aufgerufen. IIS behandelt die Seitenanforderung, sieht, dass die Seite nicht existiert, und ASP.NET wird nie geladen.
Wenn ASP.NET geladen werden soll, unabhängig davon, ob die Datei vorhanden ist, müssen Sie Ihre IIS-Konfiguration ändern. Verwenden Sie IIS6 oder IIS7 / 7.5?
Ich kann das Quellenmaterial dafür nicht finden, aber ich glaube, dass das Problem in der Tatsache liegt, dass es benutzerdefinierte Fehler Seiten und nicht Pfade .
Ihre Untersuchung legt nahe, dass Sie auf Folgendes gestoßen sind:
%Vor%Dies sollte die richtige Fehlerseite treffen. Das Folgende wird nicht:
%Vor%Diese Art von wiederholt, dass Sie bereits Ihre eigene Frage beantworten, aber ich werde sehen, ob ich das Referenzmaterial finden kann. Letztendlich handelt es sich nicht um eine Seitenanforderung, daher gibt es keine ISAPI-Behandlung durch geeignete Handler.
Tags und Links web-config .net c# asp.net iis