Работя с .NET 3.5 и IIS7.
Опитвах се да използвам customErrors за пренасочване към персонализирана страница за грешка, която все още можеше да показва подробностите за изключенията, проследяване на стека и т.н. Трудно ми беше да го накарам да работи, опитвайки около 20 различни подхода, които намерих онлайн (най-вече в stackoverflow), някои от които бяха леки вариации на други. Предпочитах пренасочването да се случи в Web.config, защото исках персонализираната страница за грешка да бъде лесно намирана/редактирана извън кода.
Ето какво най-накрая имам да работя. Публикувам, защото изпробвах толкова много от по-сложните подходи, които намерих тук, и те не ми свършиха работа, и просто исках да публикувам простия, който в крайна сметка успя.
Web.config:
<customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" />
Без redirectMode="ResponseRewrite"
не можах да получа достъп до подробностите за изключението от моята персонализирана страница за грешка.
Грешка.aspx
protected void Page_Load(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex != null)
{
if (ex.GetBaseException() != null) ex = ex.GetBaseException();
litErrorMessage.Text = String.Format("<div class=\"error\">{0}</div>", ex.Message);
litErrorStackTrace.Text = String.Format("<b>Source:</b>\n{0}\n<b>Stack Trace:</b>\n{1}\n", ex.Source, ex.StackTrace);
}
else
{
litErrorStackTrace.Text = "No Exception information available.";
}
}
Опитах също да използвам HttpException ex = (HttpException)HttpContext.Current.Server.GetLastError();
, както се вижда в някои примери, но това не проработи.
Опитах също всички видове код в Global.asax -> Application_Error, но се оказа, че не е необходимо. След изпробване на всички видове код там, включително съхраняване на сесийни променливи, Application_Error вече е празен.