====== C# ASP.NET Exception handling ====== ===== Ošetření vyjímek na úrovni aplikace ===== Pokud chceme, aby se uživateli neobjevila standardní hlaska Unhandled exception, nastavíme přesměrování na naší vlastní error stránku. \\ **web.config** 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

Error occurred!


Your request couldnt be processed. Click here to go back and try the operation again.

Message:
Source:
If the error persists, please contact server administrator.
You can see the error details in error.log.
===== 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]]\\