2010-09-27 8 views
1

J'ai cette erreur de redirection personnalisée dans mon fichier web.config, mais il ne semble pas fonctionner puisque j'ajouté le redirectMode="ResponseRewrite"erreur 404 ne rediriger correctement

Il fonctionne très bien pour 500 erreurs, mais pas pour 404 (il ne vient pas rediriger quand j'ai 404)

est ici le code de web.config

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

Et voici mon 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 protected]" 

    Errormail.From   = "[email protected]" 
    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) 

J'ai besoin de garder le redirectMode="ResponseRewrite" afin que le servererror/default.aspx me envoie un e-mail quand il y a une erreur

Toute aide serait appréciée

Merci

Jamie

MISE À JOUR

J'ai jeté un coup d'oeil sur le web et j'ai trouvé quelques autres personnes ayant le même questions mais je ne peux pas trouver une réponse définitive.

Toutes les idées

Merci

Jamie

+0

Si vous essayez d'ouvrir nonexistingpage.htm il ne devrait pas fonctionner, c'est la façon dont il est, à moins que si vous utilisez IPM. – Tomasi

+0

qu'est-ce que IPM? désolé je suis un débutant –

Répondre

3

Je suppose que vous voyez le .NET générique lorsque la page est introuvable?

La solution est comme ci-dessous. Notez l'ajout du ~ pour le chemin:

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

MISE À JOUR:

Alors que votre solution fonctionne, il est un peu hacky - en particulier la façon dont vous avez fait usage de l'état de session serait mal vu sur dans une application à grande échelle ou parmi d'autres développeurs plus expérimentés. Je suggère que les erreurs 500 et 404 soient réparties sur différentes pages. Si votre site Web est disponible sur le Web, il est utile d'afficher différents messages d'erreur pour les utilisateurs réels, à savoir si la page qu'ils recherchent a disparu (404) ou s'il y a des problèmes temporaires (500). bonne idée de revenir plus tard. Le texte sur l'erreur chaque page devrait refléter cela en conséquence. Il est également important de signaler aux moteurs de recherche les codes d'état appropriés pour indiquer si une page n'est plus disponible, à savoir qu'elle a été supprimée de votre projet et doit être supprimée de l'index du moteur de recherche ou s'il y a une erreur. retourner pour explorer la page plus tard et ne pas tomber de l'index. Ne pas signaler correctement ces codes d'état peut nuire aux performances de votre application Web via les moteurs de recherche. En règle générale mon web.config se lit comme suit:

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

Note: il est important d'avoir l'attribut "defaultRedirect" set en raison d'un trou de sécurité a récemment découvert dans le .NET Framework (demander à Google). Définir ceci est une solution pour boucher le trou.

Pour signaler les codes d'état HTTP corrects au client (et au robot du moteur de recherche), vous pouvez utiliser le code ci-dessous. les placer simplement en cas de chargement de la page de la page:

Pour 500 erreurs:

Response.Status = "500 Internal Server Error" 

erreurs 404:

Response.Status = "404 Not Found" 

Vous pouvez maintenant supprimer le code de l'Global.asax et créez une fonction partagée pour votre logique d'email d'erreur qui peut être appelée à partir de chaque page. Si vous préférez, vous pouvez fusionner le code ci-dessus dans votre page d'erreur existante, mais je préfère toujours les séparer comme je le trouve plus propre.

Si vous voulez tester les codes d'état HTTP de vos pages que je vous recommande de prendre un coup d'oeil à une application gratuite appelée Fiddler

+0

Salut, j'ai essayé cela, mais m'a quand même donné la page générique ne peut pas être trouvé erreur –

+0

Cela fonctionne vraiment pour moi. En passant, est-ce que votre application web est face à vous, c'est-à-dire que vous voulez qu'elle soit disponible via les moteurs de recherche? – BradB

+0

Salut oui il est disponible via les moteurs de recherche s'il vous plaît voir ma réponse que j'ai posté qui semblait résoudre mon problème –