Existem três aspectos do tratamento de exceções no ASP.NET:
Rastreamento - Rastreamento da execução do programa no nível da página ou no nível do aplicativo.
Tratamento de erros - Lide com erros padrão ou personalizados no nível da página ou do aplicativo.
Depuração – Avance pelo programa e defina pontos de interrupção para analisar o código.
Neste capítulo, discutiremos rastreamento e manuseio. E neste capítulo, abordaremos a depuração.
Para entender os conceitos, crie o aplicativo de amostra a seguir. Possui um controle de rótulo, uma lista suspensa e um link. A lista suspensa carrega uma série de cotações e a cotação selecionada será exibida no rótulo abaixo. Também possui um hiperlink que aponta para um link que não existe.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// PT" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Rastreamento, depuração e tratamento de erros </title> </head> <body> <form id= "form1" runat="server"> <div> <asp:Label ID="lblheading" runat="server" Text="Rastreamento, depuração e tratamento de erros"> </asp:Label> <br /> <br / > <asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat= "servidor"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="servidor" NavigateUrl="mylink.htm">Link para:</asp:HyperLink> </div> </form> </body></html>
Código após arquivo:
classe parcial pública _Default: System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {"A imaginação é mais importante que o conhecimento.", "Albert Einsten"}, {"Assuma uma virtude, se você não a tiver" "Shakespeare"}, {"Um homem não pode se sentir confortável sem sua própria aprovação", "Mark Twain"}, {"Cuidado com o jovem médico e o velho barbeiro", "Benjamin Franklin"}, {"Tudo o que começa com raiva termina em vergonha", "Benjamin Franklin"} } for (int i=0; i<quotes.GetLength(0). ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1])); ddlquotes_SelectedIndexChanged (objeto remetente, EventArgs e) { if (ddlquotes.SelectedIndex! = -1) { lblquotes.Text = String.Format ("{0}, Citação: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue) ; } }}
Para permitir o rastreamento em nível de página, você precisa modificar a diretiva Page e adicionar um atributo Trace da seguinte forma:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
Agora, ao executar o arquivo, você obterá informações de rastreamento:
Ele fornece as seguintes informações no cabeçalho:
ID da sessão
Código de status
Hora da solicitação
Tipo de solicitação
Codificação de solicitação e resposta
Cada vez que a página é solicitada, o código de status enviado pelo servidor exibe o nome e a hora do erro, se houver. A tabela a seguir mostra códigos de status HTTP comuns:
número | descrever |
---|---|
Notificação(100 - 199) | |
100 | continuar |
101 | acordo de conversão |
Sucesso(200 - 299) | |
200 | OK |
204 | Sem conteúdo |
Redirecionar (300 - 399) | |
301 | mudar permanentemente |
305 | Use um proxy |
307 | redirecionamento temporário |
Erros do cliente (400 - 499) | |
400 | Pedido ruim |
402 | Requisitos de pagamento |
404 | não encontrado |
408 | Solicitar tempo limite |
417 | Espere falhar |
Erro do servidor (500 - 599) | |
500 | Erro do Servidor Interno |
503 | Serviço não disponível |
505 | Versão HTTP não suportada |
Abaixo das informações de nível superior, há um log de rastreamento, que fornece detalhes do ciclo de vida da página. Ele fornece o tempo decorrido em segundos desde que a página foi inicializada.
A próxima seção é a árvore de controle, que lista todos os controles da página em formato hierárquico:
A última declaração em Session e Application é a coleção de resumos, cookies e cabeçalhos seguida por todas as variáveis do servidor.
Os objetos de rastreamento permitem adicionar informações personalizadas à saída de rastreamento. Possui dois métodos para concluir: método Write e método Warn.
Altere o manipulador de eventos Page_Load para detectar o método Write:
protegido void Page_Load(objeto remetente, EventArgs e){ Trace.Write("Carregamento de página"); if (!IsPostBack) { Trace.Write("Não postar de volta, carregamento de página"); ............. }}
Corra para ver o impacto:
Para detectar o método Warn, vamos forçar algum código de erro no manipulador de eventos alterado do índice selecionado:
tente{ int a = 0; int b = 9 / a;}catch (Exceção e){ Trace.Warn("UserAction", "processando 9/a", e);}
Try-Catch é uma construção de programação C#. O bloco try contém qualquer código que pode ou não gerar um erro, e o bloco catch captura o erro. Quando o programa é executado, ele envia avisos no log de rastreamento.
O rastreamento no nível do aplicativo se aplica a todas as páginas do site. Ele é implementado colocando o seguinte código no arquivo web.config:
<system.web> <trace enabled="true" /></system.web>
Embora o ASP.NET detecte todos os erros em tempo de execução, ainda existem alguns pequenos erros. A observação de erros por meio de rastreamento é tarefa dos desenvolvedores, não dos usuários.
Portanto, para evitar que isso aconteça, você pode adicionar configurações de resolução de erros no web.config da sua aplicação. É a resolução de erros em todo o aplicativo. Por exemplo, você pode adicionar o seguinte código ao arquivo web.config:
<configuração> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redireccionamento="NoAccess.htm" /> <error statusCode="404" redireccionamento="FileNotFound .htm" /> </customErrors> </system.web><configuration>
Alguns dos atributos possíveis: - **Modo:** Permite ou não páginas de erro personalizadas. Possui três valores possíveis: - **On:** Exibe uma página personalizada. - **Desligado:** Mostra a página de erro do ASP.NET (página amarela) - **remoteOnly:** Mostra erros personalizados para o cliente, mostrando erros locais do ASP.NET. - **defaultRedirect:** Contém a URL da página a ser exibida em caso de erros não resolvidos. Para colocar diferentes páginas de erro personalizadas para diferentes tipos de erro, são usadas subtags, onde diferentes páginas de erro são especificadas com base no código de status do erro. Para obter a resolução de erros no nível da página, a diretiva Page pode ser modificada para: `````` Como a depuração do ASP.NET é um tópico importante dentro dela, discutiremos isso separadamente no próximo capítulo.