.NET Извличане на грешка StackTrace в персонализирана страница за грешка

Работя с .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 вече е празен.


person Lys777    schedule 12.06.2014    source източник
comment
Публикувайте въпроса и отговора отделно. Можете да отговорите на собствения си въпрос.   -  person Ehsan    schedule 12.06.2014
comment
Нямах достатъчно повторения, за да направя това до 8 часа по-късно и не исках хората да губят време с вече отговорения ми въпрос. Все пак благодаря за съвета.   -  person Lys777    schedule 13.06.2014
comment
напълно добре е да отговорите на собствения си въпрос. Тъй като може да помогне на някой друг един ден.   -  person Ehsan    schedule 14.06.2014