Wir unsere eigene Fehlerseiten, wie unten für Ausnahmen von ASP.NET geworfen konfiguriert haben:Wie wird eine benutzerdefinierte Fehlerseite angezeigt, wenn Ausnahmen für die Anforderungsüberprüfung ausgelöst werden?
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="400" redirect="~/400.aspx"/>
<error statusCode="404" redirect="~/404.aspx"/>
<error statusCode="500" redirect="~/500.aspx"/>
</customErrors>
Einstellung redirectMode="ResponseRewrite"
wichtig ist, da es die URL (glaubt nicht ändern wird sichergestellt, ich ASP.NET eine Server.Transfer
führt statt Response.Redirect
).
Leider funktioniert dies nicht für Request Validation Errors. Wenn beispielsweise benutzerdefinierte Fehler aktiviert sind, wenn ich zu /some/page/<script>
navigiere, wird die Anfragevalidierung von ASP.NET gestartet und eine HttpException
wird ausgelöst. Statt jedoch meine benutzerdefinierte Fehlerseite anzuzeigen, erhalte ich die folgende Meldung:
Serverfehler in '/' Anwendung.
Runtime Error
Beschreibung: Eine Ausnahme ist aufgetreten während der Bearbeitung Ihrer Anfrage. Darüber hinaus trat eine weitere Ausnahme beim Ausführen der benutzerdefinierten Fehlerseite für die erste Ausnahme auf. Die Anfrage wurde beendet.
Warum kann ASP.NET meine benutzerdefinierte Fehlerseite in diesem Szenario nicht anzeigen? Es gibt keinen Code in der Fehlerseite, nur HTML, also weiß ich, dass die Fehlerseite selbst keine Ausnahmen auslöst.
Auch wenn ich den Fehler selbst in Application_Error
und eine Ausgabe Server.Transfer
erstelle es funktioniert gut, ich bin gespannt, was ASP.NET tut unter den Abdeckungen.
Wenn wir selbst damit umgehen wollen, gibt es dann eine bessere Lösung?
protected void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError() as HttpException;
if (ex != null
&& ex.Message.StartsWith("A potentially dangerous Request.Path value was detected from the client")
&& HttpContext.Current.IsCustomErrorEnabled)
{
Server.Transfer("400.aspx");
}
}
Sind Sie sicher, dass der Validierungsfehler 400,404 oder 500 Fehler auslöst? vielleicht ein anderer Fehlercode, der nicht von deiner Config bearbeitet wird – David
Hast du das herausgefunden? – Animesh