Cómo crear un informe de páginas en ASP.NET mediante Visual C#. de errores personalizado

Seleccione idioma Seleccione idioma
Id. de artículo: 306355 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E306355
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describe cómo usar código de Visual C# .NET para capturar y responder a los errores que se producen en ASP.NET. ASP.NET ha mejorado las opciones de Microsoft páginas Active Server (ASP) tradicionales de control de errores. En ASP.NET, puede controlar los errores en niveles diferentes en sus aplicaciones.

Nuevas características de ASP.NET

ASP.NET ofrece varios avances en cómo puede controlar y responder a los errores. En las páginas ASP tradicionales, errores se tratan con "On Error Resume Next" (o bloques try-catch en JScript). Como alternativa, si está ejecutando Microsoft Internet Information Services (IIS) 5.0, utilice el objeto ASPError para crear una página de informe de error personalizado. Sin embargo, estos enfoques tienen sus limitaciones.

ASP.NET proporciona varios niveles en el que puede controlar y responder a los errores que pueden producirse al ejecutar una aplicación ASP.NET. ASP.NET proporciona tres métodos principales que le permiten capturar y responder a los errores cuando se producen: Page_ErrorApplication_Errory el archivo de configuración de la aplicación (Web.config).

En este artículo se muestra cómo utilizar estas nuevas características de la aplicación ASP.NET. Aunque este artículo describe cómo proporcionar páginas de error personalizadas e informes de error general se relaciona directamente con ASP.NET, este artículo no describe otros enfoques, como el bloque try-catch-finally y el sistema de excepciones Common Language Runtime (CLR) de control de errores.

Cómo usar el método Page_Error

El controlador del evento Page_Error proporciona una manera de capturar errores que se producen en el nivel de página. Simplemente puede mostrar información de error (como hace el código de ejemplo siguiente), o puede registrar el evento o realizar alguna otra acción.

Nota En este ejemplo se muestra información detallada del error en el explorador únicamente con fines de demostración. Desea tener cuidado al mostrar información detallada al usuario final de la aplicación, especialmente cuando la aplicación se ejecuta en Internet. Una acción más apropiada sería mostrar un mensaje al usuario que les notifica que se ha producido un error y registrar los detalles del error específico en el registro de sucesos.

En este ejemplo se inicia una excepción nula, que fuerza un error en el controlador de eventos Page_Load . Siga estos pasos para crear la página inicial que demostrará el uso del controlador del evento Page_Error .
  1. Siga estos pasos para agregar que un nuevo archivo llamado PageEvent.aspxto el proyecto:
    1. Abra Microsoft Visual Studio. NET.
    2. En el Explorador de soluciones, haga clic en el nodo del proyecto, elija Agregary, a continuación, haga clic en Agregar formulario Web.
    3. En el cuadro de texto nombre , escriba PageEvent.aspxy, a continuación, haga clic en Abrir.
  2. Agregue el código siguiente a 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 En este ejemplo de código, el atributo AutoEventWireup no se establece explícitamente. Si no assigna valor para el atributo AutoEventWireup explícitamente, se utiliza el valor predeterminado es true . Si está utilizando Visual Studio .NET de desarrollar yourapplications, el código de la plantilla de formulario Web Forms establece explícitamente el valor del atributo AutoEventWireup a false. Hay una diferencia importante entre los usos de thatASP.NET del valor predeterminado y el valor predeterminado que el codeassigns de la plantilla de Visual Studio .NET de a este atributo. Si el valor del atributo AutoEventWireup se establece en false, los controladores de eventos que se declaran en el.Notfire de de página ASPX. Esto puede resultar confuso si no conoce sobre thisfunctionality.
  3. En el menú archivo , haga clic en Guardar PageEvent.aspx.
  4. Haga clic en la página y, a continuación, haga clic en Ver en el explorador para ejecutar la página. Observe que se produce el error y reportedaccording a las especificaciones del código.
Nota Puede observar que el código emite una llamada a Server.ClearError. Esto impide que el error continúe al controlador de eventos Application_Error .

Además, también debe tomar nota del atributo Inherits en la directiva @ Page . Si se establece Inherits , deberá generar el proyecto antes de explorar la página. Si no se genera el proyecto primero, recibirá el siguiente mensaje de error:
'Project.PageEvent' no es un tipo válido

Cómo usar el método Application_Error

Al igual que el controlador del evento Page_Error , puede utilizar el controlador de eventos Application_Error para capturar los errores que se producen en la aplicación. Debido al ámbito de aplicación del evento, puede registrar la información de error de aplicación de o tratar otros errores de aplicación que se pueden producir.

El ejemplo siguiente se basa en el ejemplo de código Page_Error anterior y se desencadenaría si el error de Page_Load no se capturó en el controlador del evento Page_Error . El controlador de eventos Application_Error se especifica en el archivo Global.asax de la aplicación. Por simplicidad, los pasos de esta sección crean una nueva página en la que se va a producir la excepción, captura el error en el controlador de eventos Application_Error del archivo Global.asax y escribir el error en el registro de sucesos. Los pasos siguientes muestran cómo usar el método Application_Error :
  1. Agregar un nuevo archivo llamado AppEvent.aspx al convertirá.
  2. Agregue el código siguiente a AppEvent.aspx:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Nota La información descrita en la sección "Page_Error" sobre el atributo AutoEventWireup también se aplica para el código de ejemplo de este paso. Consulte la información en la sección "Page_Error" para obtener más detalles.
  3. En el menú archivo , haga clic en Guardar AppEvent.aspx.
  4. Agregue el controlador de eventos Application_Error en el archivo Global.asax para capturar el error que SIME tiran en el controlador de eventos Page_Load de la página AppEvent.aspx. Observe que debe añadiremos la instrucción using para el espacio de nombres System.Diagnostics a Global.asax para usar el registro de sucesos.

    Agregue código siguientes en el archivo 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 el archivo Global.asax.
  6. En Visual Studio. NET, en el menú Generar , haga clic en Generar.
  7. Haga clic en la página y, a continuación, haga clic en Ver en el explorador. En este caso, la página estará en blanco, sin embargo, debería notesque se ha agregado una nueva entrada en el registro de sucesos. En este ejemplo se crea una entrada en el registro de aplicación, que está accesible desde el Visor de sucesos. Después de loggingthe error desee redirigir al usuario a otra página más de friendlyerror de usuario o realizar algunas acciones adicionales si es necesario.

Cómo utilizar el archivo Web.config

Si no se llama Server.ClearError o captura el error en el Page_Error o Application_Error controlador de eventos, el error se controla según la configuración en la sección <customErrors>del archivo Web.config. En la sección <customErrors>, puede especificar una página redirigida como página de error predeterminada (defaultRedirect) o especificar una página determinada basada en el código de error HTTP que se genera. Puede utilizar este método para personalizar el mensaje de error que recibe el usuario.

Si se produce un error que no se captura en ninguno de los niveles anteriores de la aplicación, se muestra esta página personalizada. En esta sección se muestra cómo modificar el archivo Global.asax para que nunca se llame a Server.ClearError . Como resultado, el error se trata en el archivo Web.config como el último punto para capturar el error. </customErrors></customErrors>
  1. Abra el archivo Global.asax de la previousexample.
  2. Comente la línea Server.ClearError para asegurarse de que el error se presenta en el Web.configfile.
  3. Guarde los cambios en Global.asax. El código debe nowappear similar al siguiente:
    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. Agregue el código siguiente a la <customErrors>sectionto redirigir al usuario a una página personalizada:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Nota Debe modificar la ruta del archivo en el atributo defaultRedirect para que haga referencia a los nombres de equipo de servidor Web correspondientes.
  5. Debido a los errores que se capturan en este nivel son envió una página de error predeterminada, debe crear una página de error denominada ErrorStatus.htm.Keep en cuenta que se utilice este método para controlar lo que se presenta al usuario, por lo que en este ejemplo se usa una página .htm para la página de error. Agregue el followingcode a 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 probar el código, guarde los archivos, genere el proyecto, y luego vea AppEvent.aspx en el explorador. Observe que cuando se produce el error, se le redirige a la página ErrorStatus.htm.
Aunque puede hacer referencia a una página de error predeterminada en el valor del atributo defaultRedirect en la sección <customErrors>, también puede especificar una página determinada a redirigir basándose en el código de error HTTP que se genera. Esta opción permite el elemento secundario de <error>. Por ejemplo:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Nota La página que se especifica en defaultRedirect de la sección de <customErrors>es un archivo .htm. I

Observe que la sección de <customErrors>incluye un atributo de modo está establecido en On. El atributo mode se utiliza para controlar cómo se produce la redirección del error. Por ejemplo, si está desarrollando la aplicación, más probable es que desea ver los mensajes de error ASP.NET reales y no desea que se redirige a la página de error más fácil de usar. El atributo mode incluye las siguientes opciones: </customErrors></customErrors>
  • En: las excepciones no controladas redirigen al usuario a la página especificada defaultRedirect . Este modo se usa principalmente en producción.
  • Desactivado: los usuarios reciben información de excepciones y no redirectedto la página defaultRedirect . Este modo se usa principalmente en desarrollo.
  • RemoteOnly: sólo los usuarios que acceso al sitio en el equipo local (usinglocalhost) reciben la información de excepción. Todos los demás usuarios se redirigen a la página defaultRedirect . Este modo se usa principalmente para depuración.

Solución de problemas

En su instalación predeterminada en Microsoft Windows 2000 y Microsoft Windows XP, ASP.NET ejecuta el código de la aplicación Web en un proceso de trabajo. El valor predeterminado de la identidad de este proceso es una cuenta local sin privilegios llamada ASPNET. En las versiones beta de ASP.NET, la identidad del proceso era sistema, una eficaz cuenta administrativa con muchos privilegios en el equipo.

En su instalación predeterminada en Windows Server 2003 (IIS 6), ASP.NET ejecuta el código de la aplicación Web en un proceso de trabajo. El valor predeterminado de la identidad de este proceso es una cuenta local limitada denominada NetworkService.

Para obtener más información acerca de este cambio y cómo puede afectar a ejecutar el código de este artículo y otro código que podría necesitar derechos de acceso adicionales, visite los siguientes sitios Web:
Cambios de seguridad en la versión 1 de la de Microsoft.NET Framework
http://msdn2.Microsoft.com/en-us/library/ms994923.aspx

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft:
Administración de excepciones en .NET

Método HttpServerUtility.ClearError

Centro de desarrollo de MSDN .NET

Página principal de Microsoft .NET

Propiedades

Id. de artículo: 306355 - Última revisión: martes, 29 de octubre de 2013 - Versión: 2.0
La información de este artículo se refiere 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
Palabras clave: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 306355

Enviar comentarios

 

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