2

Je cherche HttpExceptions dans la sous Application_Error de mon global.asxServer.Transfer (« error_404.aspx ») dans Application_Error retourne une page blanche

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 

     Dim ex As Exception = HttpContext.Current.Server.GetLastError() 

     If ex IsNot Nothing Then 
      If TypeOf (ex) Is HttpUnhandledException Then 
       If ex.InnerException Is Nothing Then 
        Server.Transfer("error.aspx", False) 
       End If 
       ex = ex.InnerException 
      End If 

      If TypeOf (ex) Is HttpException Then 
       Dim httpCode As Integer = CType(ex, HttpException).GetHttpCode() 
       If httpCode = 404 Then 
        Server.ClearError() 
        Server.Transfer("error_404.aspx", False) 
       End If 
      End If 
     End If 
End Sub 

Je peux parcourir ce code et confirmer qu'il ne frappe le Server.Transfer ("error_404.aspx"), ainsi que le Page_Load de error_404.aspx, mais tout ce qu'il montre est une page blanche.

+0

Assurez-vous d'ajouter un appel à votre système de consignation des erreurs. Si une exception non gérée se produit, vous voulez savoir si vous pouvez y remédier. – tsilb

Répondre

4

Etes-vous en train d'effacer le tampon de réponse? Vous n'avez aucune idée de ce qui existe déjà, puisque vous le faites dans l'erreur Application_Error. Server.Transfer ajoute simplement ce que la nouvelle page génère sur la réponse existante. Évidemment, cela pourrait créer des problèmes.

+0

c'est essentiellement ce qui se passait. server.transfer lançait une exception car son tampon de sortie n'était pas vide – kenwarner

0

Est-ce que cela fonctionne si vous changez le Server.Transfer en Response.Redirect? (Vous devrez peut-être utiliser le préfixe HTTPContext.Current d'où vous êtes dans global.asax.)

Je ne suis pas sûr qu'un Server.Transfer est une bonne idée dans le contexte de ce que vous faites, depuis vous demandez effectivement à IIS de rendre l'URL global.asax au navigateur.

+0

si j'utilise Response.Redirect, il génère un HTTP 302, puis redirige vers error_404.aspx. Je veux générer une seule requête 404 et afficher le contenu de error_404.aspx tout en gardant l'URL la même que la requête originale. par votre deuxième commentaire, comment puis-je demander à IIS de rendre le global.asax? Je pensais que Server.Transfer ("error_404.aspx") signifie qu'il demanderait à IIS de rendre error_404.aspx – kenwarner

+0

Ca a du sens .. J'ai réussi à faire deux erreurs dans ce petit post. Peut-être que je vais supprimer et attendre la vraie réponse ... – LesterDove

0

Je pense que si une erreur se produit, Server.Transfer ne se déclenchera pas.

Server.Transfer n'est pas une bonne méthode pour cela. Essayez avec Response.Redirect. Ça devrait marcher.

Si vous avez une exception, y a-t-il des exigences pour le maintien des états? Sinon, passez à Response.Redirect.

+0

comme je l'ai dit à LesterDove, si j'utilise un Response.Redirect, je me retrouve avec 2 réponses. La page d'origine, qui redirige 302 vers error_404.aspx. Je veux générer une seule réponse 404 – kenwarner