Chandan Kumar
Chandan Kumar

Reputation: 4638

Catch all exceptions in ASP.NET C# rather than each method in a `try{} catch{}` block

Is there a better way to catch all exceptions in one place without writing try{} catch{} for each method?

Upvotes: 2

Views: 1335

Answers (2)

Chandan Kumar
Chandan Kumar

Reputation: 4638

Thanks All. I got an answer from a site.Here is the code i have modified according to the exception and logging errors with a third party(Elmah) in the application. Hope, it will be helpful for others.

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs
    //Get the exception object
    Exception exceptionObject = Server.GetLastError();
    try
    {
      if (exceptionObject != null)
      {
         if (exceptionObject.InnerException != null)
         {
            exceptionObject = exceptionObject.InnerException;
         }

         switch (exceptionObject.GetType().ToString())
         {
            case "System.Threading.ThreadAbortException":
                HttpContext.Current.Server.ClearError();
                break;
            default:
                // log exception ...
                //Custom method to log error
                Elmah.ErrorSignal.FromCurrentContext().Raise(exceptionObject);
                break;
            }
        }
    }
    catch 
    {
        //Avoiding further exception from exception handling
    }
}

Upvotes: 0

Mihai Dinculescu
Mihai Dinculescu

Reputation: 20033

You can catch the exceptions in your application by overwriting Application_Error found in Global.asax. However, using this approach you cannot act on these exceptions like you could using a regular try catch block.

You can log it

void Application_Error(object sender, EventArgs e)
{
     Exception ex = Server.GetLastError();

     // if there's an Inner Exception we'll most likely be more interested in that
     if (ex .InnerException != null)
     {
         ex = ex .InnerException;
     }

     // filter exception using ex.GetType() ...
     // log exception ...

     // Clear all errors for the current HTTP request.
     HttpContext.Current.ClearError();
}

And/or redirect

void Application_Error(object sender, EventArgs e)
{
     Exception ex = Server.GetLastError();

     // process exception

     // redirect
     HttpContext.Current.ClearError();             
     Response.Redirect("~/Error.aspx", false);
     return;
}

And this is about all your can do.

Upvotes: 3

Related Questions