2010-10-22 6 views
1

OK je le code suivant dans mon fichier Global.asax:Application_Error ne déclenche plus lors de la publication à IIS

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 
     Exception objError = Server.GetLastError().GetBaseException(); 

     Response.Redirect(
      String.Format(
      "/Error/{0}/{1}", 
      ((HttpException)objError).GetHttpCode(), 
      Request.RawUrl)); 
} 

Fournir urls d'erreur propre et bien rangé comme "/ Erreur/404/TheNameOfTheRequestedPage". Cela fonctionne très bien de VS 2008, mais une fois publié à ma machine locale, je reçois la page d'erreur par défaut:

erreur Résumé

Erreur HTTP 404.0 - non trouvé

La ressource que vous êtes recherche a été supprimée, que son nom ait changé ou est temporairement indisponible

Quelqu'un sait comment faire thi s? J'ai choisi de ne pas utiliser system.web/customErrors parce que je n'ai pas accès à Server.GetLastError() à partir de là (ou du moins cela n'a jamais fonctionné pour moi) et je veux obtenir le code http.

Répondre

2

Ceci est probablement lié à vous déclencher une erreur IIS Http qui est défini dans le web.config sous les nœuds

<system.webServer>  
    <httpErrors> 
    </httpErrors>  
<system.webServer> 

Si la question vous est un y retourne un code de réponse pour 404 et obtenir la page IIS 404 est la question que vous devez faire

Response.TrySkipIisCustomErrors = true; 

Avant de laisser la finition de réponse autrement IIS intercepte l'erreur.

Ceci est complètement au-delà de l'intuition, surtout si vous définissez le code d'état vous-même. J'ai essayé de trouver un moyen de déposer un bogue sur Microsoft Connect que la définition manuelle d'un code d'erreur http ne définit pas automatiquement TrySkipIisCustomErrors mais n'a pas pu trouver de produit pertinent à soumettre.

0

J'ai eu un problème similaire, et un appel à Server.ClearError() avant la redirection a résolu le problème.

Dans votre cas, j'écrirais

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 
     Exception objError = Server.GetLastError(); 
     if(objError is HttpException){ 
      //Need to clear the error, otherwise the buil-in redirect would occure 
      Server.ClearError(); 
      Response.Redirect( 
       String.Format( 
       "/Error/{0}/{1}", 
       ((HttpException)objError).GetHttpCode(), 
       Request.RawUrl)); 
     } 
} 

Notez que Server.GetLastError(). GetBaseException() retourne la baseexception, ce qui est toujours le HttpException, celui que vous recherchez est juste GetLastError().

Questions connexes