Domanda

Ho questo reindirizzamento dell'errore personalizzato nel mio file web.config ma non sembra funzionare da quando ho aggiunto il redirectMode="ResponseRewrite"

Funziona bene per 500 errori ma non per 404 (non reindirizza quando ho un 404)

Ecco il codice da web.config

<customErrors mode="On" redirectMode="ResponseRewrite"> 
   <error statusCode="404" redirect="/servererror/default.aspx" /> 
   <error statusCode="500" redirect="/servererror/default.aspx" /> 
</customErrors>

Ed ecco il mio servererror/default.aspx codice

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)

Ho bisogno di mantenere il redirectMode="ResponseRewrite" In modo che la servererror/default.aspx mi invia un'e-mail quando c'è un errore

Qualsiasi aiuto sarebbe molto apprezzato

Grazie

Jamie

AGGIORNARE

Ho dato un'occhiata al web e ho trovato alcune altre persone che hanno gli stessi problemi, ma non riesco a trovare una risposta definitiva.

Qualche idea

Grazie

Jamie

È stato utile?

Soluzione

Presumo che tu stia vedendo il .NET generico quando la pagina non può essere trovata?

La soluzione è come sotto. Nota l'aggiunta di ~ per il percorso:

    <customErrors mode="On" redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/servererror/default.aspx"/>
        <error statusCode="500" redirect="~/servererror/default.aspx"/>
    </customErrors>

AGGIORNARE:

Mentre la tua soluzione funziona, è un po 'hacky - in particolare il modo in cui hai fatto uso dello stato di sessione sarebbe disapprovato in un'applicazione su larga scala o tra gli altri sviluppatori più esperti. Suggerisco di avere gli errori 500 e 404 divisi su pagine diverse.

Se il tuo sito Web è disponibile tramite Web, è utile visualizzare diversi messaggi di errore agli utenti reali, ad esempio se la pagina che stanno cercando è andata (404) o ci sono alcuni problemi temporanei (500) e potrebbe essere una buona idea verificare indietro più tardi. Il testo sull'errore ogni pagina dovrebbe riflettere questo di conseguenza. È anche importante riferire ai codici di stato appropriati dei motori di ricerca per indicare se una pagina non è più disponibile, cioè è stata rimossa dal progetto e dovrebbe essere eliminata dall'indice del motore di ricerca o se è presente un errore e il motore di ricerca dovrebbe Torna per strisciare la pagina in seguito e non cadere dall'indice. Non segnalare correttamente questi codici di stato può compromettere le prestazioni dell'app Web tramite i motori di ricerca. In genere il mio web.config si legge come di seguito:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx">
    <error statusCode="404" redirect="~/NotFound.aspx"/>
</customErrors>

Nota: è importante avere l'attributo "defaultredirect" a causa di un foro di sicurezza recentemente scoperto all'interno del framework .net (chiedi a Google). Impostazione Questa è una soluzione alternativa per collegare il foro.

Per segnalare i codici di stato HTTP adeguati al client (e al bot del motore di ricerca) è possibile utilizzare il codice seguente. Basta posizionarli nell'evento di caricamento della pagina della pagina pertinente:

Per 500 errori:

Response.Status = "500 Internal Server Error"

Per 404 errori:

Response.Status = "404 Not Found"

Ora puoi rimuovere il codice da Global.asax e creare una funzione condivisa per la tua logica e -mail di errore che può essere chiamata da ogni pagina. Se preferisci puoi unire il codice sopra nella tua pagina di errore esistente, tuttavia preferisco sempre dividerli mentre lo trovo più ordinato.

Se si desidera testare i codici di stato HTTP delle tue pagine, ti consiglio di dare un'occhiata a un'applicazione gratuita chiamata Violinista

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top