Pokud chceme uživateli zobrazit více informací o vyjímce, která nastala, můžeme využít handler a chybovou stránku generovat dynamicky.
\\
Neošetřenou vyjímku odchytíme v Global.asax a předáme naší stránce pro jejich obsluhu. Pokud nemáme nějakou mezi-vrstvu pro uložení vyjímky, použijeme session. Zároveň zde vyjímku můžeme ukládat do logu atd...
protected void Application_Error(object sender, EventArgs e)
{
// Get the exception
Exception ex = Server.GetLastError().GetBaseException();
// Log the error
log_Error.Error(ex.Message,ex);
Session["LastException"] = ex;
// Get Error page from web.config
Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
CustomErrorsSection customErrorsSection = (CustomErrorsSection)configuration.GetSection("system.web/customErrors");
// Redirect to Error page
Server.Transfer(customErrorsSection.DefaultRedirect);
// Clears the last thrown exception
Server.ClearError();
}
\\
Příklad jak může vypadat ErrorPage zobrazující neošetřenou vyjímku uživateli.\\ \\
** Code behind **
public partial class ErrorPage : System.Web.UI.Page
{
protected void Page_PreLoad(object sender, EventArgs e)
{
lblDateTime.Text = String.Format("{0:u}", DateTime.Now);
// Page where the exception was thrown
hplBack.NavigateUrl = Request.QueryString["aspxerrorpath"];
if (Session["LastException"] != null)
{
Exception ex = (Exception)Session["LastException"];
lblExMessage.Text =ex.Message;
lblExSource.Text = ex.Source;
}
}
}
}
\\
** aspx Page **
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ErrorPage.aspx.cs" Inherits="MyWeb.ErrorPage" %>
Application Error
===== Ošetření vyjímek na úrovni stránky =====
Pokud se rozhodneme ošetřit vyjímku na úrovni stránky, postupujeme stejně jako v Global.asax, využíváme ale handler dané stránky. Vyjimku pak můžeme zpracovat dle svých představ.
\\
\\
**Code behind**
protected void Page_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();
// do something with exception
// Log exception
// Redirect
}
===== Try-catch =====
===== Links =====
[[http://aspnetresources.com/articles/CustomErrorPages.aspx]]\\
[[http://www.jankoatwarpspeed.com/post/2008/06/02/Exception-handling-best-practices-in-ASPNET-web-applications.aspx]]\\
[[http://msforge.net/blogs/janko/archive/2008/03/08/asp-net-exception-handling-best-practices.aspx]]\\