Como criar o relatório páginas ASP.NET utilizando o Visual c# .NET de erros personalizados

Traduções de Artigos Traduções de Artigos
Artigo: 306355 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve como utilizar código do Visual c# .NET para interceptar e responder a erros quando ocorrem no ASP.NET. ASP.NET melhorou os opções de tradicional Microsoft Active Server Pages (ASP) de processamento de erros. No ASP.NET, pode processar erros em vários níveis diferentes nas suas aplicações.

Novas funcionalidades no ASP.NET

O ASP.NET oferece várias progressos na forma como pode processar e responder a erros. No ASP tradicional, o utilizador processa erros com "On Error Resume Next" (ou blocos try-catch no JScript). Em alternativa, se estiver a executar o Microsoft Internet Information Services (IIS) 5.0, utilize o objeto ASPError para criar uma página de relatórios de erro personalizadas. No entanto, estas abordagens têm as suas limitações.

O ASP.NET fornece vários níveis em que pode processar e responder a erros que poderão ocorrer quando executa uma aplicação do ASP.NET. O ASP.NET fornece três métodos que permitem aplicar um véu e responder a erros quando ocorrem: Page_Error, Application_Errore o ficheiro de configuração da aplicação (Web. config).

Este artigo demonstra como utilizar estas novas funcionalidades na aplicação do ASP.NET. Embora este artigo descreve como fornecer páginas de erro personalizadas e de relato de erros gerais que diga respeito directamente para o ASP.NET, este artigo não descreve outros abordagens, tais como o bloco try-catch-finalmente e o sistema de excepção de tempo de execução de linguagem comum (CLR) de processamento de erros.

Como utilizar o método de Page_Error

O processador de eventos Page_Error fornece uma forma de interceptar erros que ocorrem ao nível da página. Poderá optar por apresentar informações de erro (como acontece com o código de exemplo a seguir), ou pode registar o evento ou executar qualquer outra acção.

Nota Este exemplo apresenta informações de erro detalhadas no browser apenas para fins de demonstração. Deverá ter cuidado quando apresentar informações detalhadas para o utilizador final da aplicação, especialmente quando a aplicação está em execução na Internet. Uma acção mais adequada seria apresentar uma mensagem para o utilizador notificando-o que ocorreu um erro e, em seguida, iniciando realmente os detalhes de erro específica no registo de eventos.

Este exemplo inicia uma excepção nula, o que obriga um erro no processador de eventos Page_Load . Siga estes passos para criar a página inicial que vai demonstrar a utilizar o processador de eventos Page_Error .
  1. Siga estes passos para adicionar que um novo ficheiro com o nome PageEvent.aspxto do projecto:
    1. Abra o Microsoft Visual Studio .NET.
    2. No Solution Explorer, clique com o botão direito do rato em projecto, aponte para Adicionare, em seguida, clique em Adicionar formulário de Web.
    3. Na caixa de texto nome , escreva 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> 
    					

    Nota Neste exemplo de código, o atributo AutoEventWireup não for explicitamente definido. Se o fizer não explicitamente assigna valor ao atributo AutoEventWireup , é utilizada a predefinição valor Verdadeiro . Se estiver a utilizar o Visual Studio .NET para desenvolver yourapplications, o código do modelo de formulário Web define explicitamente o valor do atributo AutoEventWireup como Falso. Existe uma diferença importante entre as utilizações de thatASP.NET de valor predefinido e o valor predefinido que o codeassigns de modelo do Visual Studio .NET para este atributo. Se o valor do atributo AutoEventWireup é definido como false, os processadores de eventos que são declarados na.Notfire de fazer de página ASPX. Isto pode ser confuso se não souber sobre thisfunctionality.
  3. No menu ficheiro , clique em Guardar PageEvent.aspx.
  4. Com o botão direito da página e, em seguida, clique em Ver no Browser para executar a página. Repare que o erro é accionado e reportedaccording as especificações de código.
Nota Poderá reparar que o código emite uma chamada para Server.ClearError. Isto impede que o erro continuar para o processador de eventos Application_Error .

Além disso, também deve tomar nota do atributo Inherits na directiva @ Page . Se estiver definido Inherits , tem de criar o projecto antes de navegar para a página. Se não criar o projecto pela primeira vez, receberá a seguinte mensagem de erro:
'Project.PageEvent' não é um tipo válido

Como utilizar o método de Application_Error

Tal como o processador de eventos de Page_Error , pode utilizar o processador de eventos Application_Error para interceptar erros que ocorrem na sua aplicação. Devido ao âmbito de aplicação ao nível do evento, pode iniciar sessão de informações de erro de aplicação ou processar outros erros de nível da aplicação que poderão ocorrer.

A amostra a seguir se baseia o anterior exemplo de código de Page_Error e teria de ser accionada se o erro em Page_Load não tiver sido capturado no processador de eventos Page_Error . O processador de eventos de Application_Error é especificado no ficheiro global asax da aplicação. Por simplicidade, os passos nesta secção, crie uma nova página em que a accione a excepção, interceptar o erro no processador de eventos Application_Error do ficheiro global asax e o erro de escrita para o registo de eventos. Os seguintes passos demonstram como utilizar o método Application_Error :
  1. Adicione um novo ficheiro com o nome 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>
    					

    Nota As informações debatidas na secção "Page_Error" sobre o atributo AutoEventWireup também se aplica o código de exemplo neste passo. Consulte as informações na secção "Page_Error" para obter mais detalhes.
  3. No menu ficheiro , clique em Guardar AppEvent.aspx.
  4. Adicione o processador de eventos Application_Error ao ficheiro global asax para interceptar o erro que youthrow no processador de eventos Page_Load da página AppEvent.aspx. Repare que tem que addanother a instrução a utilizar para o espaço de nomes System.Diagnostics global. asax para utilizar o registo de eventos.

    Adicione o código de thefollowing ao ficheiro 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. Guarde o ficheiro global. asax.
  6. No Visual Studio .NET, no Build menu, clique em Criar.
  7. Com o botão direito da página e, em seguida, clique em Ver no Browser. Neste caso, a página ficará em branco, no entanto, deverá noticethat que tiver sido adicionada uma nova entrada no registo de eventos. Este exemplo efectua uma entrada no registo de aplicações, que é acessível a partir do Visualizador de eventos. Depois de erro de loggingthe poderá redireccionar o utilizador para outra página de utilizador-friendlyerror de mais, ou executar algumas acções adicionais, se necessário.

Como utilizar o ficheiro Web. config

Se não chamar Server.ClearError ou o erro do Page_Error ou processador de eventos de Application_Error , o erro de trap é processado com base nas definições na secção <customErrors>do ficheiro Web. config. Na secção <customErrors>, pode especificar uma página de redireccionamento como uma página de erro predefinida (defaultRedirect) ou especificar a uma página específica a que se baseia o código de erro HTTP que é aumentado. Pode utilizar este método para personalizar a mensagem de erro que o utilizador recebe.

Se ocorrer um erro que não se encontre oculto em qualquer um dos níveis anteriores na sua aplicação, esta página personalizada é apresentada. Esta secção demonstra como modificar o ficheiro global asax, para que nunca seja invocado o Server.ClearError . Como resultado, o erro é processado no ficheiro Web. config, como o último ponto para interceptar o erro. </customErrors></customErrors>
  1. Abra o ficheiro global asax a partir do previousexample.
  2. Comente a linha de Server.ClearError para garantir que as superfícies de erro do Web.configfile.
  3. Guarde as alterações a global. asax. O 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 redireccionar o utilizador para uma página personalizada:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Nota Tem de modificar o caminho do ficheiro no atributo defaultRedirect para que referencia os nomes de andapplication de servidor Web relevantes.
  5. Visto que os erros capturados com armadilhas neste nível são sentto uma página de erro predefinida, tem de criar uma página de erro com o nome ErrorStatus.htm.Keep não se esqueça de que está a utilizar este método para controlar o que é apresentado ao theuser, para que este exemplo utiliza 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, guardar os ficheiros, criar o projecto, andthen, ver AppEvent.aspx no browser. Repare que quando o erro é accionado, é redireccionado para a página de ErrorStatus.htm.
Apesar de pode fazer referência a uma página de erro predefinida no valor do atributo defaultRedirect na secção <customErrors>, também pode especificar uma página específica para redireccionar para basear o código de erro HTTP que é aumentado. Esta opção permite o elemento subordinado de <error>. Por exemplo:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Nota A página especificada no defaultRedirect da secção <customErrors>é um ficheiro. htm. I

Repare que a secção <customErrors>inclui um atributo de modo que está definido como On. O atributo de modo é utilizado para controlar a forma como o redireccionamento de erro ocorre. Por exemplo, se estiver a desenvolver a aplicação, muito provavelmente pretende ver as mensagens de erro reais do ASP.NET e não pretender ser redireccionado para a página de erro mais fácil de utilizar. O atributo de modo inclui as seguintes definições: </customErrors></customErrors>
  • No: excepções não processadas redireccionar o utilizador para a página especificada defaultRedirect . Este modo é utilizado principalmente na produção.
  • Off: os utilizadores recebem as informações da excepção e página defaultRedirect redirectedto não estão. Este modo é utilizado principalmente em desenvolvimento.
  • RemoteOnly: só os utilizadores que acedam ao site no computador local (por usinglocalhost) recebem as informações da excepção. Todos os outros utilizadores são redireccionados para a página defaultRedirect . Este modo é utilizado principalmente para depuração.

Resolução de problemas

Na sua instalação predefinida, no Microsoft Windows 2000 e no Microsoft Windows XP, o ASP.NET é executado código da aplicação Web num processo de trabalho. A identidade deste processo assume uma conta sem privilégios local chamada a conta ASPNET. Em versões beta do ASP.NET, a identidade do processo foi sistema, uma conta administrativa poderosa com muitos privilégios no computador.

Na sua instalação predefinida no Windows Server 2003 (IIS 6), o ASP.NET é executado código da aplicação Web num processo de trabalho. A identidade deste processo assume uma conta limitada denominada NetworkService.

Para mais informações sobre esta alteração e como pode afectar a executar o código neste artigo e outro código que poderá ter direitos de acesso adicionais, visite os seguintes Web sites:
Versão 1 alterações de segurança para o Microsoft .NET Framework
http://msdn2.microsoft.com/en-us/library/ms994923.aspx

Referências

Para mais informações, visite os seguintes Web sites da Microsoft:
Gestão de excepções no .NET

Método de HttpServerUtility. ClearError

Centro de desenvolvimento .NET MSDN

Home Page do Microsoft .NET

Propriedades

Artigo: 306355 - Última revisão: 29 de outubro de 2013 - Revisão: 4.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 por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
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