Artigo: 306355 - Última revisão: terça-feira, 28 de Agosto de 2007 - Revisão: 4.8

Como criar personalizado relato páginas ASP.NET utilizando o Visual C#. NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

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 o erro de processamento de opções de tradicional Microsoft Active Server Pages (ASP). No ASP.NET, pode tratar erros em vários níveis diferentes nas suas aplicações.

Novas funcionalidades do ASP.NET

O ASP.NET oferece vários desenvolvimentos in como pode gerir e responder a erros. No ASP tradicional, processar 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, utilizar o objeto ASPError para criar uma página de relatório de erro personalizada. No entanto, estas abordagens têm as respectivas limitações.

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

Este artigo demonstra como utilizar estas novas funcionalidades do ASP.NET aplicação. Apesar deste artigo descreve como fornecer páginas de erro personalizadas e relato de erros gerais como se relaciona com directamente a ASP.NET, este artigo não descreve outro erro processamento abordagens tais como o bloco try-catch-finalmente e o sistema de excepção de CLR (Common Language Runtime).

Como utilizar o método Page_Error

O processador de eventos Page_Error fornece uma forma para aplicar véus a erros que ocorrem ao nível da página. Apenas pode 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. Poderá ter cuidado ao apresentar informações detalhadas para o utilizador final da aplicação, especialmente quando a aplicação estiver a utilizar a Internet. Seria uma acção mais adequada apresentar uma mensagem ao utilizador notificar que ocorreu um erro e, em seguida, registo, na realidade, os detalhes do erro específico no registo de eventos.

Neste exemplo lança uma excepção nulo, o que obriga um erro no processador de eventos Page_Load . Siga estes passos para criar a página inicial que demonstra a utilizar o processador de eventos Page_Error .
  1. Siga estes passos para adicionar um novo ficheiro chamado PageEvent.aspx ao projecto:
    1. Abra o Microsoft Visual Studio .NET.
    2. No Solution Explorer, clique com o botão direito do rato no nó de projecto, aponte para Adicionar e, em seguida, clique em Adicionar formulário de Web .
    3. Na caixa de texto nome , escreva PageEvent.aspx e, 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 AutoEventWireup atributo não for explicitamente definido. Se não for explicitamente atribuído um valor ao atributo AutoEventWireup , é utilizada a predefinição valor Verdadeiro . Se utilizar o Visual Studio .NET para desenvolver as aplicações, o código de modelo de formulário Web define explicitamente o valor do atributo AutoEventWireup como false . Existe uma diferença importante entre o valor predefinido que o ASP.NET utiliza e o valor predefinido que o código de modelo do Visual Studio .NET atribui a este atributo. Se o valor do atributo AutoEventWireup estiver definido como false , os processadores de eventos são declarados na página .aspx não despoletado. Isto pode ser confuso se não tiver conhecimento sobre esta funcionalidade.
  3. No menu ficheiro , clique em Guardar PageEvent.aspx .
  4. Com o botão direito do rato na página e, em seguida, clique em View in browser para executar a página. Repare que o erro é accionado e comunicado de acordo com as especificações de código.
Nota Poderá notar que o código emite uma chamada para Server.ClearError . Isto impede que o erro continuar ao processador de eventos Application_Error .

Além disso, também deve tomar nota do atributo Inherits na directiva @ Page . Se Inherits estiver definido, terá de criar o projecto antes de procurar na 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 Application_Error

Tal como o processador de eventos Page_Error , pode utilizar o processador de eventos Application_Error para aplicar um véu erros que ocorrem na aplicação. Devido ao âmbito de toda a aplicação do evento, pode registar informações de erro de aplicação ou processar outros erros de nível da aplicação que poderão ocorrer.

O exemplo a seguir é baseado no anterior exemplo de código Page_Error e irá ser desencadeado se o erro em Page_Load não tiver sido aplicados véus no processador de eventos Page_Error . O processador de eventos Application_Error é especificado no ficheiro global.asax da aplicação. Para uma questão de simplicidade, os passos nesta secção criar uma nova página para accionar a excepção, aplica um véu o erro no processador de eventos Application_Error do ficheiro global.asax e o erro de escrita no registo de eventos. Os seguintes passos demonstram como utilizar o método Application_Error :
  1. Adicione um novo ficheiro chamado AppEvent.aspx ao projecto.
  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 apresentadas na secção " Page_Error " sobre o atributo AutoEventWireup aplicam-se também para 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 véu o erro que accione no processador de eventos Page_Load da página AppEvent.aspx. Repare que tem de adicionar outra instrução utilizando o espaço de nomes System.Diagnostics Global.asax para utilizar o registo de eventos.

    Adicione o seguinte código 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 menu criar , clique em criar .
  7. Com o botão direito do rato na página e, em seguida, clique em View in browser . Neste caso a página serão em branco, no entanto, deve notar que foi adicionada uma nova entrada no registo de eventos. Este exemplo torna uma entrada no registo de aplicações, que é acessível a partir do Visualizador de eventos. Depois de iniciar o erro poderá redireccionar o utilizador para outra página de erro mais fácil de utilizar ou executar algumas acções adicionais se for necessário.

Como utilizar o ficheiro Web.config

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

Se ocorrer um erro não aplicados véus em qualquer um dos níveis anteriores da aplicação, esta página personalizada é apresentada. Esta secção demonstra como modificar o ficheiro global.asax poder Server.ClearError nunca seja invocado. Como resultado, o erro é processado no ficheiro Web.config, como o último ponto para o erro de traps.
  1. Abra o ficheiro global.asax do exemplo anterior.
  2. Comentário sem a linha Server.ClearError para se certificar de que o erro surfaces in a Web.config ficheiro.
  3. Guarde as alterações global.asax. O código deverá aparecer agora semelhante ao 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 código seguinte à secção <customerrors> para redireccionar o utilizador para uma página personalizada:
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Nota tem de modificar o caminho do ficheiro no atributo defaultRedirect forma a que faz referência aos nomes relevantes do servidor e aplicações Web.
  5. Uma vez que os erros que são aplicados véus neste nível são enviados para uma página de erro predefinida, tem de criar uma página de erro denominada ErrorStatus.htm. Não se esqueça de que está a utilizar este método para controlar o que é apresentado ao utilizador para que este exemplo utiliza uma página .htm para a página de erro. Adicione o seguinte código para 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 e, em seguida, visualizar AppEvent.aspx no browser. Repare que, quando o erro é accionado, é redireccionados para a página ErrorStatus.htm.
Apesar de pode referenciar 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 com base no código de erro de HTTP é accionado. Elemento <error> subordinado permite esta opção. Por exemplo:
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Nota A página que é especificada em defaultRedirect da secção <customerrors> é um ficheiro .htm. I

Repare que a secção <customerrors> inclui umatributo de modo estiver 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, provavelmente pretende ver as mensagens de erro ASP.NET reais e não pretende ser redireccionado para a página de erro mais fácil de utilizar. O atributo de modo inclui as seguintes definições:
  • no : não processadas excepções redireccionar o utilizador para a página especificada defaultRedirect . Este modo é utilizado principalmente na produção.
  • off : utilizadores recebem as informações de excepção e não são redireccionados para a página defaultRedirect . Este modo é utilizado principalmente em desenvolvimento.
  • RemoteOnly : só os utilizadores que aceder ao site no computador local (utilizando localhost) recebem as informações de 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

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

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

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

Referências

Para obter mais informações, visite os seguintes Web sites da Microsoft:
Gestão de excepções no .NET
http://msdn2.microsoft.com/en-us/library/ms954599.aspx (http://msdn2.microsoft.com/en-us/library/ms954599.aspx) Método HttpServerUtility.ClearError
http://msdn2.microsoft.com/en-us/library/system.web.httpserverutility.clearerror(vs.71).aspx (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebHttpServerUtilityClassClearErrorTopic.asp) MSDN .NET Development Center
http://msdn2.microsoft.com/en-us/netframework/default.aspx (http://msdn2.microsoft.com/en-us/netframework/default.aspx) Home page do Microsoft .NET
http://www.microsoft.com/net/ (http://www.microsoft.com/net/)

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: 
kbmt kbconfig kbhowtomaster kbweb KB306355 KbMtpt
Tradução automáticaTraduçã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  (http://support.microsoft.com/kb/306355/en-us/ )