2013-05-06 5 views
2

J'utilise les erreurs personnalisées attribut dans le web.config pour gérer les erreurs personnaliséessession est nul après ResponseRewrite

Comme ceci:

<customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" /> 

Après une erreur est renvoyée, la page est redirigé à la page d'erreur, mais lorsque j'accède à la session dans la page d'erreur, il est null.

La raison pour laquelle j'utilise ResponseRewrite et non ResponseRedirect est parce que je passe le Exception id à travers les éléments en utilisant elmah.

J'ai même essayé de créer un nouveau site Web asp.net vide et cela arrive toujours.

J'ai déjà vu des questions similaires mais sans réponse.

+0

Pourriez-vous ajouter le code ou plus de détails? Je ne reproduis pas l'erreur dans le studio visuel 2012, IIS 8. – nmat

+0

J'utilise Visual Studio 2010, iis6 – Amir

Répondre

2

J'ai reproduit le problème, mais je n'arrive pas à comprendre pourquoi cela se produit. Dans le gestionnaire Application_Error, je peux accéder à la variable Session, mais lorsque la page se charge, elle devient null.

J'ai trouvé une solution de contournement here qui résout le problème. Vous devez supprimer le redirectMode de votre web.config et faire manuellement le Server.Transfer en cas d'erreur. Voici donc le web.config:

<customErrors mode="On" defaultRedirect="~/Error.aspx"/> 

Et ajoutez ceci au fichier Global.asax.cs:

void Application_Error(object sender, EventArgs e) 
{ 
    if(Context.IsCustomErrorEnabled) 
    { 
    Server.Transfer("~/Error.aspx"); 
    } 
} 

Pour spécifier les pages d'erreur différentes en fonction de l'erreur, vous pouvez accéder au code d'erreur comme ceci:

HttpException httpException = (HttpException) Server.GetLastError(); 
int httpCode = httpException.GetHttpCode(); 
switch (httpCode) 
{ 
    case 500: Server.Transfer("~/Pages/Error.aspx");break; 
    case 404: Server.Transfer("~/Pages/PageNotFound.aspx");break; 
    default: Server.Transfer("~/Pages/Error.aspx");break;  
} 
+0

D'accord, j'ai réussi à le faire fonctionner en utilisant votre suggestion, mais savez-vous comment puis-je prendre la redirection par défaut de la config web basé sur la page que je suis? – Amir

+0

@Amir Voulez-vous utiliser une redirection différente pour chaque page ou voulez-vous simplement savoir comment lire la propriété 'defaultRedirect' de web.config? – nmat

+0

Je sais lire la redirection par défaut, mais que se passe-t-il si je souhaite utiliser une redirection différente? – Amir

Questions connexes