Benutzerdefinierte 404 Fehler nicht ordnungsgemäß umleiten
-
25-09-2019 - |
Frage
Ich habe diesen benutzerdefinierten Fehler in meiner Web.config -Datei umgeleitet, aber es scheint nicht zu funktionieren, da ich das hinzugefügt habe redirectMode="ResponseRewrite"
Es funktioniert gut für 500 Fehler, aber nicht für 404 (es wird einfach nicht umgeleitet, wenn ich einen 404 habe)
Hier ist der Code von web.config
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/servererror/default.aspx" />
<error statusCode="500" redirect="/servererror/default.aspx" />
</customErrors>
Und hier ist mein servererror/default.aspx
Code
Dim err As System.Exception = Server.GetLastError()
Dim Errormail = New MailMessage
'Send email to Bondholder using email address from form
Errormail.To = "email@email.co.uk"
Errormail.From = "servererror@email.co.uk"
Errormail.Subject = "Server Error Alert"
Errormail.BodyFormat = MailFormat.Text
Errormail.Priority = MailPriority.Normal
Errormail.Body = ("Error on page - " & err.InnerException.Message & vbcrlf & vbcrlf & "URL of the page - " & Request.Url.ToString())
SmtpMail.SmtpServer = "localhost"
SmtpMail.Send(Errormail)
Ich muss das behalten redirectMode="ResponseRewrite"
so, dass die servererror/default.aspx
Sendet mir eine E-Mail, wenn ein Fehler vorliegt
Jede Hilfe wäre sehr geschätzt
Vielen Dank
Jamie
AKTUALISIEREN
Ich habe mich im Internet umgesehen und einige andere Leute mit den gleichen Problemen gefunden, aber ich kann keine endgültige Antwort finden.
Irgendwelche Ideen
Vielen Dank
Jamie
Lösung
Ich nehme an, Sie sehen das generische .NET, wenn die Seite nicht gefunden werden kann?
Die Lösung ist nach unten. Beachten Sie die Zugabe des ~ für den Pfad:
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/servererror/default.aspx"/>
<error statusCode="500" redirect="~/servererror/default.aspx"/>
</customErrors>
AKTUALISIEREN:
Während Ihre Lösung funktioniert, ist sie ein wenig hackig - insbesondere so, wie Sie den Sitzungszustand genutzt haben, würde in großem Maßstab oder unter anderem die erfahrenen Entwickler verpönt. Ich schlage vor, die 500- und 404 -Fehler auf verschiedene Seiten aufzuteilen.
Wenn Ihre Website über das Web verfügbar ist, ist es nützlich, echten Benutzern verschiedene Fehlermeldungen anzuzeigen. Wenn die auf der gesuchte Seite verschwunden ist (404) oder es einige vorübergehende Probleme gibt (500) und es möglicherweise eine gute Idee ist, zu überprüfen ich bin später zurück. Der Text auf Fehler jede Seite sollte dies entsprechend widerspiegeln. Es ist auch wichtig, an die geeigneten Statuscodes der Suchmaschinen zu melden, um anzugeben, ob eine Seite nicht mehr verfügbar ist. Kehren Sie später auf die Seite zurück und fallen Sie nicht aus dem Index ab. Wenn Sie diese Statuscodes nicht korrekt melden, können Sie die Leistung Ihrer Web -App über die Suchmaschinen beeinträchtigen. Normalerweise liest mein Web.config wie unten:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx">
<error statusCode="404" redirect="~/NotFound.aspx"/>
</customErrors>
Hinweis: Es ist wichtig, dass das Attribut "DefaultRedirect" aufgrund eines kürzlich entdeckten Sicherheitslochs innerhalb des .NET -Frameworks (Ask Google) eingestellt ist. Die Einstellung ist eine Problemumgehung, um das Loch zu schließen.
Um die richtigen HTTP -Statuscodes an den Client (und Suchmaschinenbot) zu melden, können Sie den folgenden Code verwenden. Platzieren Sie sie einfach in der Seite. Laden Sie Ereignis der entsprechenden Seite:
Für 500 Fehler:
Response.Status = "500 Internal Server Error"
Für 404 Fehler:
Response.Status = "404 Not Found"
Sie können den Code jetzt aus dem global.asax entfernen und eine gemeinsam genutzte Funktion für Ihre Fehler -E -Mail -Logik erstellen, die von jeder Seite aufgerufen werden kann. Wenn Sie es vorziehen, den obigen Code in Ihre vorhandene Fehlerseite zusammenzuführen, zeichnen Sie sie jedoch immer vor, da ich ihn als ordentlicher finde.
Wenn Sie die HTTP -Statuscodes Ihrer Seiten testen möchten, empfehle ich einen Blick auf eine kostenlose Anwendung mit dem Namen Geiger