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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top