Pergunta

O que é um bom tratamento de erros prática para um site asp.net? Exemplos? Obrigado!

Foi útil?

Solução

Tal como acontece com qualquer projeto .net Acho que a melhor maneira é apenas tipos de erro específica de captura se eles são pode acontecer na página dada.

Por exemplo, você poderia capturar exceções formato para um dado usuário de entrada (só meter validação JavaScript falhar e você não usar TryParse), mas sempre deixar a captura da exceção nível superior para o manipulador de erro global.

     try
        {
            //Code that could error here
        }
        catch (FormatException ex)
        {
            //Code to tell user of their error
            //all other errors will be handled 
            //by the global error handler
        }

Você pode usar o código aberto elmah (Registro de erros módulos e manipuladores) para ASP .net para fazer este nível superior / erro global captura para você, se quiser.

Usando elmah ele pode criar um log de erros que é visível através de uma simples interface web de configuração. Você também pode filtrar diferentes tipos de erros e têm páginas de erro personalizadas de seu próprio para diferentes tipos de erro.

Outras dicas

Uma prática que eu acho ser especialmente útil é criar uma página de erro genérico, e, em seguida, definir o seu defaultRedirect no nó customErrors do web.config para essa página de erro.

Configuração Então seu global.asax para registrar todas as exceções não tratadas e, em seguida, colocá-los (as exceções não tratadas) em uma propriedade estática em alguma classe (eu tenho uma classe chamada ErrorUtil com uma propriedade LastError estático). Sua página de erro pode então olhar para esta propriedade para determinar o que será exibido para o usuário.

Mais detalhes aqui: http://www.codeproject.com/KB/aspnet /JcGlobalErrorHandling.aspx

Bem, isso é muito aberta, que é esfriar completamente. Vou encaminhá-lo para uma palavra .doc você pode baixar a partir Dot Net Aranha , que na verdade é a base para o padrão de código de minha pequena empresa. A norma inclui algum erro muito útil manipulação dicas.

Um exemplo para exceções (não me lembro se isso é original para o documento ou se o adicionou ao doc): Nunca faça uma “exceção captura e não fazer nada.” Se você ocultar uma exceção, você nunca vai saber se a exceção aconteceu. Você deve sempre tentar evitar exceções, verificando todas as condições de erro de programação.

Exemplo do que não fazer:

try
{
   ...
}
catch{}

Muito impertinente menos que você tenha uma boa razão para isso.

Você deve se certificar de que você pode pegar a maioria dos erros que são gerados pelo seu aplicativo e exibir uma mensagem amigável para os usuários. Mas é claro que você não pode pegar todos os erros para que você pode usar web.config e defaultRedirect por outro usuário. Outra ferramenta muito útil para registrar os erros é ELMAH. ELMAH irá registrar todos os erros gerados pelo seu aplicativo e mostrá-lo de uma forma muito legível. Conectando ELMAH em sua aplicação é tão simples como adicionar algumas linhas de código no arquivo web.config e fixar o conjunto. Você deve definitivamente dar ELMAH uma tentativa ele irá salvá-lo literalmente horas e horas de dor.

http://code.google.com/p/elmah/

  1. Código defensivamente dentro de cada página para exceções que você espera poderia acontecer e lidar com eles de forma adequada, de modo a não perturbar o usuário cada vez que ocorre uma exceção.

  2. Log todas as exceções, com uma referência.

  3. Fornecer uma página de erro genérica, para quaisquer exceções não tratadas, que fornece uma referência ao uso de apoio (suporte pode identificar detalhes dos registros). Não exibir a exceção real, como a maioria dos usuários não vai entender isso, mas é um potencial risco de segurança, uma vez que expõe informações sobre o sistema (potencialmente senhas etc).

  4. Do not capturar todas as exceções e não fazer nada com eles (como na resposta acima). Há quase nunca é uma boa razão para fazer isso, de vez em quando você pode querer pegar uma exceção específica e não fazer nada deliberadamente, mas isso deve ser usado com sabedoria.

Nem sempre é uma boa idéia para redirecionar o usuário para uma página de erro padrão. Se um usuário está trabalhando em uma forma, eles podem não querer ser desviados para fora da forma em que estão trabalhando. Eu coloquei todo o código que poderia causar uma exceção dentro de um bloco try / catch, e dentro do bloco catch eu cuspir uma mensagem de alerta alertando o usuário de que ocorreu um erro, bem como registrar a exceção em um banco de dados, incluindo a entrada de formulário, string de consulta , etc. estou desenvolvendo um site interno, no entanto, para a maioria dos usuários só me chamar se eles estão tendo um problema. Para um local público, você pode querer usar algo como elmah.

public string BookLesson(Customer_Info oCustomerInfo, CustLessonBook_Info oCustLessonBookInfo)
    {
        string authenticationID = string.Empty;
        int customerID = 0;
        string message = string.Empty;
        DA_Customer oDACustomer = new DA_Customer();

        using (TransactionScope scope = new TransactionScope())
        {
            if (oDACustomer.ValidateCustomerLoginName(oCustomerInfo.CustId, oCustomerInfo.CustLoginName) == "Y")
            {
                // if a new student
                if (oCustomerInfo.CustId == 0)
                {
                    oCustomerInfo.CustPassword = General.GeneratePassword(6, 8);
                    oCustomerInfo.CustPassword = new DA_InternalUser().GetPassword(oCustomerInfo.CustPassword, false);
                    authenticationID = oDACustomer.Register(oCustomerInfo, ref customerID);
                    oCustLessonBookInfo.CustId = customerID;
                }
                else // if existing student
                {
                    oCustomerInfo.UpdatedByCustomer = "Y";
                    authenticationID = oDACustomer.CustomerUpdateProfile(oCustomerInfo);
                }
                message = authenticationID;
                // insert lesson booking details
                new DA_Lesson().BookLesson(oCustLessonBookInfo);
            }

            else
            {
                message = "login exists";
            }
            scope.Complete();
            return message;
        }

    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top