Como criar relatório páginas em ASP.NET usando o Visual C# .NET de erro personalizado

Traduções deste artigo Traduções deste artigo
ID do artigo: 306355 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo descreve como usar o código do Visual C# .NET para interceptar e responder a erros quando eles ocorrerem no ASP.NET. ASP.NET melhorou opções do Microsoft Active Server Pages (ASP) tradicional de manipulação de erros. No ASP.NET, você pode manipular erros em vários níveis diferentes em seus aplicativos.

Novos recursos no ASP.NET

ASP.NET oferece vários avanços em como você pode manipular e responder a erros. No ASP tradicional, você manipula os erros com "On Error Resume Next" (ou blocos try-catch em JScript). Como alternativa, se você estiver executando o Serviços de Informações da Internet da Microsoft (IIS) 5.0, use o objeto ASPError para criar uma página de relatório de erro personalizada. No entanto, essas abordagens têm suas limitações.

ASP.NET oferece diversos níveis em que você pode manipular e responder a erros que podem ocorrer quando você executar um aplicativo ASP.NET. ASP.NET fornece três métodos principais que permitem que você interceptar e responder a erros quando eles ocorrerem: Page_ErrorApplication_Errore o arquivo de configuração do aplicativo (Web. config).

Este artigo demonstra como usar esses novos recursos em seu aplicativo ASP.NET. Embora este artigo descreve como fornecer relatórios de erros gerais que diz respeito diretamente ao ASP.NET e páginas de erro personalizadas, este artigo não descreve outros métodos, como o bloco try-catch-finally e o sistema de exceção de tempo de execução de linguagem comum (CLR) de tratamento de erros.

Como usar o método Page_Error

O manipulador de evento Page_Error fornece uma maneira para interceptar erros que ocorrem no nível da página. Você pode simplesmente exibir informações de erro (como o código de exemplo a seguir), ou você pode registrar o evento ou realizar alguma outra ação.

Observação Este exemplo exibe informações de erro detalhadas no navegador apenas para fins de demonstração. Você deve ser cuidadoso ao exibir informações detalhadas para o usuário final do aplicativo, especialmente quando o aplicativo é executado na Internet. Seria uma ação mais apropriada exibir uma mensagem para o usuário notificando que ocorreu um erro e log, na verdade, os detalhes específicos do erro no log de eventos.

Este exemplo lança uma exceção nula, que força um erro ocorra no manipulador de eventos Page_Load . Siga estas etapas para criar a página inicial que demonstra usando o manipulador de evento Page_Error .
  1. Siga estas etapas para adicionar que um novo arquivo chamado PageEvent.aspxto seu projeto:
    1. Abra o Microsoft Visual Studio .NET.
    2. No Solution Explorer, clique com botão direito no nó do projeto, aponte para Adde, em seguida, clique em Adicionar formulário da Web.
    3. Na caixa de texto nome , digite PageEvent.aspxe, em seguida, clique em Abrir.
  2. Adicione o seguinte código para PageEvent.aspx:
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    Observação Nesse exemplo de código, o atributo AutoEventWireup não está explicitamente definido. Se você não explicitamente assigna valor para o atributo AutoEventWireup , será usado o padrão valor true . Se você estiver usando o Visual Studio .NET para desenvolver yourapplications, o código do modelo de formulário da Web define explicitamente o valor do atributo AutoEventWireup como false. Há uma diferença importante entre os usos de thatASP.NET valor padrão e o valor padrão que o codeassigns de modelo do Visual Studio .NET para este atributo. Se o valor do atributo AutoEventWireup é definido como false, os manipuladores de eventos são declarados na.ASPX página notfire. Isso pode ser confuso se você não souber sobre thisfunctionality.
  3. No menu arquivo , clique em Salvar PageEvent.aspx.
  4. Clique com botão direito da página e, em seguida, clique em View in Browser para executar a página. Observe que o erro é lançado e reportedaccording para as especificações de código.
Observação Você pode observar que o código emite uma chamada para Server.ClearError. Isso impede que o erro continuar ao manipulador de eventos Application_Error .

Além disso, você também deve tomar nota do atributo Inherits na diretiva @ Page . Se Inherits estiver definido, você deve construir o projeto antes de navegar para a página. Se você não compilar o projeto pela primeira vez, você recebe a seguinte mensagem de erro:
'Project.PageEvent' não é um tipo válido

Como usar o método Application_Error

Da mesma forma que o manipulador de evento Page_Error , você pode usar o manipulador de eventos Application_Error para interceptar erros que ocorrem em seu aplicativo. Devido ao escopo de todo o aplicativo do evento, você pode efetuar logon de informações de erro do aplicativo ou manipular outros erros de nível de aplicativo que podem ocorrer.

O exemplo a seguir baseia-se no exemplo de código anterior Page_Error e será acionado se o erro em Page_Load não foi interceptado no manipulador de evento Page_Error . O manipulador de eventos Application_Error é especificado no arquivo global asax do seu aplicativo. Para simplificar, as etapas desta seção criam uma nova página na qual deseja lançar a exceção, interceptar o erro no manipulador de eventos Application_Error do arquivo global asax e o erro de gravação no log de eventos. As etapas a seguir demonstram como usar o método Application_Error :
  1. Adicione um novo arquivo chamado AppEvent.aspx para yourproject.
  2. Adicione o seguinte código para AppEvent.aspx:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Observação As informações discutidas na seção "Page_Error" sobre o atributo AutoEventWireup também se aplica para o código de exemplo nesta etapa. Consulte oprograma na seção "Page_Error" para obter mais detalhes.
  3. No menu arquivo , clique em Salvar AppEvent.aspx.
  4. Adicione o manipulador de eventos Application_Error no arquivo global. asax para interceptar o erro que youthrow no manipulador de eventos Page_Load da página AppEvent.aspx. Observe que você deve addanother usando declaração para o namespace System. Diagnostics para global. asax para usar o log de eventos.

    Adicione código de asseguintes ao arquivo global asax:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. Salve o arquivo global. asax.
  6. No .NET do Visual Studio, no menu Build , clique em Build.
  7. Clique com botão direito da página e, em seguida, clique em View in Browser. Nesse caso, a página ficará em branco, no entanto, você deve noticethat que foi adicionada uma nova entrada no log de eventos. Este exemplo cria uma entrada no log do aplicativo, que pode ser acessado do Visualizador de eventos. Após um erro loggingthe convém redirecionar o usuário para outra página de friendlyerror de usuário mais ou executar algumas ações adicionais se necessário.

Como usar o arquivo Web. config

Se você não chamar Server.ClearError ou interceptação de erro no Page_Error ou manipulador de eventos Application_Error , o erro é tratada com base nas configurações na seção <customErrors>do arquivo Web. config. Na seção <customErrors>, você pode especificar uma página de redirecionamento como uma página de erro padrão (defaultRedirect) ou especificar para uma página específica com base no código de erro HTTP que é gerado. Você pode usar esse método para personalizar a mensagem de erro que ele recebe.

Se ocorrer um erro que não está preso em qualquer um dos níveis anteriores em seu aplicativo, essa página personalizada é exibida. Esta seção demonstra como modificar o arquivo global asax para que nunca seja chamado Server.ClearError . Como resultado, o erro é tratado no arquivo Web. config como o último ponto para interceptar o erro. </customErrors></customErrors>
  1. Abra o arquivo global asax do previousexample.
  2. Descomente a linha Server.ClearError para garantir que as superfícies de erro de Web.configfile.
  3. Salve as alterações em global. asax. Seu código deve nowappear semelhante à seguinte:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. Adicione o seguinte código para o <customErrors>sectionto redirecionar o usuário para uma página personalizada:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Observação Você deve modificar o caminho do arquivo no atributo defaultRedirect para que ele faz referência os nomes de andapplication de servidor da Web relevantes.
  5. Como os erros são interceptados nesse nível são sentto uma página de erro padrão, você deve criar uma página de erro chamada ErrorStatus.htm.Keep em mente que você estiver usando esse método para controlar aquilo que é apresentado para ousuário, para que este exemplo usa uma página. htm para a página de erro. Adicione o followingcode ErrorStatus.htm:
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. Para testar o código, salve os arquivos, compile o projeto, e visualizar AppEvent.aspx no navegador. Observe que quando o erro é lançado, você é redirecionado para a página ErrorStatus.htm.
Embora você pode fazer referência a uma página de erro padrão do valor do atributo defaultRedirect na seção <customErrors>, você também pode especificar uma página específica para redirecionar para com base no código de erro HTTP que é gerado. Esta opção permite o elemento filho de <error>. Por exemplo:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Observação A página especificada no defaultRedirect da seção <customErrors>é um arquivo. htm. EU

Observe que a seção <customErrors>inclui um atributo de modo está definido como On. O atributo mode é usado para controlar como o redirecionamento de erro ocorrerá. Por exemplo, se você estiver desenvolvendo o aplicativo, provavelmente deseja ver as mensagens de erro ASP.NET reais e não deseja ser redirecionado para a página de erro mais amigável. O atributo mode inclui as seguintes configurações: </customErrors></customErrors>
  • Em: exceções não tratadas redirecionar o usuário para a página especificada defaultRedirect . Este modo é usado principalmente em produção.
  • Off: os usuários receberão as informações de exceção e são não redirectedto a página defaultRedirect . Este modo é usado principalmente em desenvolvimento.
  • RemoteOnly: apenas os usuários que acessam o site no computador local (por usinglocalhost) recebem as informações de exceção. Todos os outros usuários são redirecionados para a página defaultRedirect . Este modo é usado principalmente para depuração.

Solução de problemas

Em sua instalação padrão no Microsoft Windows 2000 e no Microsoft Windows XP, o ASP.NET executa código de aplicativo da Web em um processo de trabalho. A identidade desse processo padrão é uma conta sem privilégios de local chamada a conta ASPNET. Nas versões beta do ASP.NET, a identidade do processo era o sistema, uma conta administrativa eficiente com muitos privilégios no computador.

Em sua instalação padrão no Windows Server 2003 (IIS 6), o ASP.NET executa código de aplicativo da Web em um processo de trabalho. A identidade desse processo padrão é uma conta limitada denominada NetworkService.

Para obter mais informações sobre essa alteração e como ele pode afetar que executa o código neste artigo e outros os códigos que podem precisar de direitos de acesso adicionais, visite os seguintes sites:
Alterações na segurança do versão 1 para o Microsoft.NET Framework
http://msdn2.microsoft.com/en-us/library/ms994923.aspx

Referências

Para obter mais informações, visite os seguintes sites da Microsoft:
Gerenciamento de exceções no .NET

Método de ClearError

Centro de desenvolvimento do MSDN .NET

Home Page do Microsoft .NET

Propriedades

ID do artigo: 306355 - Última revisão: terça-feira, 29 de outubro de 2013 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Palavras-chave: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.
Clique aqui para ver a versão em Inglês deste artigo: 306355

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com