2009-02-17 25 views
9

¿Cuál es el método preferido para manejar excepciones en Webforms de ASP.NET?Tratamiento de excepciones en Webforms de ASP.NET

Tiene el método Page_Error que agrega (creo) en el nivel web.config, y todo el sitio se redirige allí cuando se produce un error.

¿Eso significa que no debe usar try-catch en ninguna parte de una aplicación webforms? (Suponiendo que no desea ocultar ningún error)

Respuesta

12

Solo detecta los errores que puede manejar. Si puede manejarlos de una manera que permita que la página continúe cargando, hágalo. Cualquier otra excepción que arruine la página no debería manejarse en ningún control o página, ya que no podría hacer nada de todos modos. Déjelo ir al controlador global.asax y asegúrese de registrar la excepción.

0

Debe usar try/catch en lugares donde puede hacer algo significativo con error, como solucionarlo o tomar un enfoque diferente.

Para todos los demás casos, debe usar global try/catch usando la página de errores personalizados web.config o el evento Application_Error para registrar el error y posiblemente mostrarlo al usuario.

4

Además de la sugerencia de Andrew, asegúrese de actualizar el archivo web.config para establecer CustomErrors en "Activado" y especifique una página de error genérica para redirigir estos errores de nivel superior. Global_asax seguirá registrando el error, y luego el usuario puede ver una página amigable. También le permitirá configurar algunos de los errores de tipo estándar, como 404 y 200, y mucho más.

0

Si utiliza controles de validación o verifica y valida la entrada del usuario en el código que se encuentra detrás de esto, se evitarán errores. Recomiendo tener una página de error genérica que pueda registrar el error por usted. En los casos en los que no esté seguro de lo que sucederá, le sugiero que capture el error y lo maneje, si es posible, y trabaje para encontrar la manera de saber que lo que va a ejecutar funcionará antes de hacerlo.

Tiene un ejemplo específico en mente de dónde podría encontrar un error de este tipo. Uno que conozco es cuando vence una sesión y ya no puede procesar la página. Verifico esto en cada carga de página antes de ejecutar cualquier otra cosa y luego redirijo al usuario si esto ha ocurrido.

2
  • aplicación Web normalmente se compone de interfaz de usuario, de negocios y datos de la capa de acceso layer.Each debe hacer su parte con respecto a la gestión de excepciones. Cada capa debe (para la usabilidad del código) verificar la condición de error y envolver la excepción (después de iniciar sesión) y tal vez propagarse a la capa de llamada. La capa de IU debe ocultar la excepción y mostrar un mensaje amigable. Capturar todas las excepciones en UI tal vez no sea una buena idea. De ser posible, deberían registrarse excepciones en la base de datos. Esto permitirá la facilidad de mantenimiento y corrección de errores

  • Evite atrapar excepciones tanto como sea posible. Pruebe y valide todas las entradas antes de usarlas. Las entradas de validación rigurosa (tanto del lado del cliente como del servidor) con ayuda de controles de validación, controles personalizados y expresiones regulares son imprescindibles.

    string fname = "abc"; 
    //Always check for condition, like file exists etc... 
    if (System.IO.File.Exists(fname)) 
    { 
    
    } 
    else 
    { 
    
    } 
    
  • Siempre asegúrese de que se llame al código de limpieza. Usando la declaración o prueba finalmente.

  • Puede ver todas las excepciones en Global.asax (asp.archivo de la aplicación neta)

    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs 
        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... 
    
    } 
    

y añadir <customerror> sección en su configuración web para redirigir usuario a una página separada

<customErrors defaultRedirect="error.htm" mode="On"> 
    </customErrors> 
Cuestiones relacionadas