Benutzerdefinierte Fehlerbehandlung in web.config / Global.asax, die kein nicht existierendes Verzeichnis behandelt

8

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%     
Kaos 14.04.2011, 14:22
quelle

4 Antworten

25

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:

  1. 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%
  2. 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.

  3. 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.

Kev 14.04.2011, 15:22
quelle
4

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?

    
Charlie Kilian 14.04.2011 14:29
quelle
3

Sie müssen die Platzhalterzuordnung einrichten, damit alle Anforderungen durch .Net

gehen

Wenn Sie IIS6 verwenden, sollte der folgende Link Ihnen helfen:

Ссылка

Wildcard-Skriptzuordnung und integrierte IIS 7-Pipeline:

Ссылка

    
RandomWebGuy 14.04.2011 14:30
quelle
0

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.

    
Grant Thomas 14.04.2011 14:30
quelle

Tags und Links